désolé c'est un peu long. Je joins le setup et le loop. Il y a aussi plusieurs fonctions. Je compte ouvrir un projet sur le forum dés que j'aurai réussi cette intégration.
// déclaration des variables
#include <SyncPWM.h>
SyncPWM pwmsynchro;
const int pot_inertie_ACC = A0; // Règle l'inertie a l'accélération
int val_inertie_ACC; // Variable pour lire la valeur de pot_inertie_acc
const int detecteur_en_ZA = A1; // Détecteur produisant un signal 0v
bool etat_ZA = true; // si un train est à l'arrêt en ZA true sinon false
const int detecteur_en_ZT = A2; // Détecteur produisant un signal 0v
bool etat_ZT = true; // si un train est à l'arrêt en ZA, il l'est aussi en ZT true sinon false
const int pot_reglage = A6; // potar pour régler la valeur max de la pwm et donc la vitesse
const int MarcheArret = A4; // Interrupteur marche arrêt
const int pot_inertie_FREIN = A5; // Règle l'inertie au freinage
int val_inertie_FREIN; // Variable pour lire la valeur de pot_inertie_frein
// A6 libre
// A7 libre
// LIBRE pour l'instant const int reglagevitesse = 2; // sur la pin 2 ou 3 exclusivement pour les interruption
const int led_feuxrouges = 4; // Led rouge si à l'arrët - Feu rouge
const int led_feuxoranges = A3; // Led orange si ralenti
const int led_feuxverts = 5; // Led verte si en marche - Feu vert
const int occup_canton_n1 = 13; // occupation du canton n1
const int occup_canton_n = 7; // occupation du cabton n
const int led_A_B = 8; // Led sens de A vers B
//N1 et N2 correspondent aux bornes d'un pont en H L298N sont remplacés par DIR et PWM
const int BRAKE = 9; // Utilisation de BRAKE pour l'arrêt et le démarrage
const int DIR = 10; // Utilisation du PWM pour la direction
const int PWM = 3; // changer en 3 pour test syncpwm// Utilisation du PWM pour la valeur de PWM moteur analogique
const int LedMarcheArret = 12;
bool EtatMarcheArret = false; // on initialise Etat marche arrêt sur arrêt
int vitesse;
int vitesseralenti; // pour la vitesse de ralenti
int vitessearret; //pour mise en route
int vitessetest = 200;
int vitessetestetape6 = 50;
int mesure_potreglage = 0; // valeur pour mesurer la valeur du potar de réglage de la valeur max de la pwm
int mesure_potreglageancien = 0;
int etatinterruption = LOW;
int valDIR = 0;
int valPWM = 0;
int valBRAKE = 0;
int valeurmaxpwm =0;
bool sens_A_vers_B; // vrai si sens gare A vers gare B
int compteur; // pour suivre dans le monniteur l'avancement du programme
int timer = 3000;
int etat_detecteuren_ZA; // mémorise l'état du détecteur utilisé dans les tests HIGH si le détecteur a été actif
int etat_detecteuren_ZT; // quand N1 est libre le mettre systématiquement à LOW car nous l'utilisons pour un test qui provoque le ralenti du train.
//Si n1 devient libre avant l'arrêt du train il faut réinitialiser cette variable
//*************************************************************
void setup()
{
pinMode (BRAKE, OUTPUT);
digitalWrite (BRAKE,HIGH);
pinMode (DIR,OUTPUT);
pinMode (PWM, OUTPUT);
digitalWrite (DIR,LOW);
digitalWrite (PWM,LOW);
pinMode (MarcheArret,INPUT);
pinMode (LedMarcheArret,OUTPUT);
digitalWrite (LedMarcheArret,HIGH);
EtatMarcheArret= digitalRead (MarcheArret);
while (EtatMarcheArret == LOW) // tant que le bouton marche arrêt n'est pas sur marche il ne se passe rien
{
EtatMarcheArret= digitalRead (MarcheArret);
}
// on passe l'état marche arrêt qui est devenu marche en ligne ci-dessus à arrêt pour mesurer plus tard le changement d'état du bouton marche arrêt
delay(300);
Serial.begin(9600);
digitalWrite (LedMarcheArret,LOW);
Serial.println("Etat Marche Arret");
Serial.println (EtatMarcheArret);
Serial.println( "demarrage du programme");
// Changement de fréquence du PWM
//TCCR1B &= 0xF8;
//TCCR1B |= B00000010;
pwmsynchro.begin(6); // Start a synchronized PWM with sync on pin 6
pwmsynchro.analogWrite(30);
pinMode (occup_canton_n, OUTPUT);
digitalWrite (occup_canton_n, HIGH); // LOW pour libre, HIGH pour occupé
pinMode (occup_canton_n1, INPUT);
pinMode (pot_inertie_ACC, INPUT);
pinMode (pot_inertie_FREIN, INPUT);
valDIR = digitalRead (DIR);
Serial.println ("valeur DIR =");
Serial.println (valDIR);
valPWM = analogRead (PWM);
Serial.println ("valeur PWM =");
Serial.println (valPWM);
pinMode (detecteur_en_ZA, INPUT);
pinMode (detecteur_en_ZT, INPUT);
pinMode (led_A_B,OUTPUT); // led de sens bicolore
digitalWrite (led_A_B,LOW);
pinMode (led_feuxrouges,OUTPUT);
digitalWrite (led_feuxrouges,HIGH);
pinMode (led_feuxverts,OUTPUT);
digitalWrite (led_feuxverts,LOW);
pinMode (led_feuxoranges,OUTPUT);
digitalWrite (led_feuxoranges,LOW);
analogWrite (vitesse,0); // initialisation de la vitesse à 0
//attachInterrupt (0,Marche_Arret,FALLING); // validation du changement de vitesse ( commandé par le potentiomètre vitesse)
// sur le réseau. mettre 0 si pin 2 et 1 si pin 3 V6 je change le nom de la fonction sans les ()
compteur =1;
etat_detecteuren_ZA = LOW; // ou = digitalRead (detecteur_en_ZA) mais le détecteur ne détecte pas si loco à l'arrêt
etat_detecteuren_ZT = LOW; //digitalRead (detecteur_en_ZT)
Serial.print ("test sur mise en route");
Serial.println ();
mise_en_route(); // cette fonction met les feux au rouge ou au vert et libère le brake pour que le LMD soit opérationnel
//potreglagevitesse ();
Serial.println("lecture réglage potentiomètre");
mesure_potreglage = analogRead(pot_reglage); // lecture de la valeur du potar réglage valeur max de la pwm
valeurmaxpwm = map(mesure_potreglage,0,1023,0,255); // transfert de cette valeur en valeur correspondant à celle le la pwm
Serial.print(valeurmaxpwm);
}
//*******************************************************
void loop()
{
delay (30);// lorsque qu'une carte n'est pas une Arduino ou une Genuino
Serial.print ("passage dans le loop");
Serial.println ();
Marche_Arret(); // arrêt d'urgence
digitalRead(occup_canton_n1);
Serial.print("occupation canton n1 = ");
Serial.println(digitalRead(occup_canton_n1));
digitalRead(occup_canton_n);
Serial.print("occupation canton n = ");
Serial.println(digitalRead(occup_canton_n));
Serial.print("vitesse ");
Serial.println (vitesse);
Serial.print("lecture réglage potentiomètre");
mesure_potreglage = analogRead(pot_reglage); // lecture de la valeur du potar réglage valeur max de la pwm
valeurmaxpwm = map(mesure_potreglage,0,1023,0,255); // transfert de cette valeur en valeur correspondant à celle le la pwm
Serial.print("vitesse début loop ");
Serial.println(vitesse);
analogWrite(PWM,vitesse); // c'est celui ci qui me redonne la vitesse en fin étape 4 à l'initialisation
detection();
}