/* REPRODUIRE CE CODE SUR CHACUNE DES CARTES CONNECTEES */
const int pinDetection = 2;
const int pinLed_Nm1 = 3;
const int pinLed_Np1 = 4;
const int pinLedCantonOccupe = 5;
const byte pinEcritEtatN_to_Nm1 = 6; // => 9 de N-1
const byte pinEcritEtatN_to_Np1 = 7;// => 8 de N+1
const byte pinLitEtatNm1_to_N = 8;
const byte pinLitEtatNp1_to_N = 9;
const byte pinBM1 = 12;
const byte pinLedCantonLibre = 13;
bool etatDetecteur_N = LOW;
bool etatDetecteur_N_old;
bool etatVerrou_N = LOW;
bool etatDetecteur_Nm1 = LOW;
bool etatDetecteur_Nm1_old = LOW;
bool etatDetecteur_Np1 = LOW;
bool etatDetecteur_Np1_old = LOW;
void setup() {
Serial.begin(9600);
pinMode(pinDetection, INPUT_PULLUP);
pinMode(pinLed_Nm1, OUTPUT);
pinMode(pinLed_Np1, OUTPUT);
pinMode(pinLedCantonOccupe, OUTPUT);
pinMode(pinEcritEtatN_to_Nm1, OUTPUT);
pinMode(pinEcritEtatN_to_Np1, OUTPUT);
pinMode(pinLitEtatNm1_to_N, INPUT);
pinMode(pinLitEtatNp1_to_N, INPUT);
pinMode(pinBM1, OUTPUT);
pinMode(pinLedCantonLibre, OUTPUT);
etatDetecteur_N_old = !digitalRead(pinDetection);
etatDetecteur_Nm1_old = digitalRead(pinLitEtatNm1_to_N);
etatDetecteur_Np1_old = digitalRead(pinLitEtatNp1_to_N);
Traitement(etatDetecteur_N_old, etatDetecteur_Nm1_old, etatDetecteur_Np1_old);
} // Fin de setup()
void loop() {
// Lit l'état de l'Arduino N
etatDetecteur_N = !digitalRead(pinDetection);
if (etatDetecteur_N != etatDetecteur_N_old){
etatDetecteur_N_old = etatDetecteur_N;
Traitement(etatDetecteur_N, etatDetecteur_Nm1, etatDetecteur_Np1);
} // Fin de if (etatDetecteur_N != etatDetecteur_N_old)
// Lit l'état de l'Arduino N-1
etatDetecteur_Nm1 = digitalRead(pinLitEtatNm1_to_N);
if (etatDetecteur_Nm1 != etatDetecteur_Nm1_old){
etatDetecteur_Nm1_old = etatDetecteur_Nm1;
Traitement(etatDetecteur_N, etatDetecteur_Nm1, etatDetecteur_Np1);
} // Fin de if (etatDetecteur_Nm1 != etatDetecteur_Nm1_old)
// Lit l'état de l'Arduino N+1
etatDetecteur_Np1 = digitalRead(pinLitEtatNp1_to_N);
if (etatDetecteur_Np1 != etatDetecteur_Np1_old){
etatDetecteur_Np1_old = etatDetecteur_Np1;
Traitement(etatDetecteur_N, etatDetecteur_Nm1, etatDetecteur_Np1);
} // Fin de if (etatDetecteur_Np1 != etatDetecteur_Np1_old)
} // Fin de loop()
void Traitement(bool etatN, bool etatNm1, bool etatNp1){
/*
etatCantonN(bool etatN)
Si le canton N passe à "occupé"
- on active le verrou de N
- on envoit l'information sur N-1
- on envoit l'information sur N+1
- on allume la led rouge en entrée du canton
- on éteint la led verte en entrée du canton
Si le canton N passe à "libre"
- on désactive le verrou de N
- on envoit l'information sur N-1
- on envoit l'information sur N+1
- on éteint la led rouge en entrée du canton
- on allume la led verte en entrée du canton
*/
etatVerrou_N = etatN;
digitalWrite(pinEcritEtatN_to_Nm1, etatN);
digitalWrite(pinEcritEtatN_to_Np1, etatN);
digitalWrite(pinLedCantonOccupe, etatN);
digitalWrite(pinLedCantonLibre, !etatN);
/*
etatCantonNm1(bool etatNm1)
*/
digitalWrite(pinLed_Nm1, etatNm1);
/*
etatCantonNp1(bool etatNp1)
Détection sur N+1
Si le canton N + 1 passe à "occupé"
- on allume la led orange en entrée du canton N
- on éteint la led rouge en entrée du canton N
- on éteint la led verte en entrée du canton N
- si le verrou de N est désactivé on active le relais de commande d'arrêt sur le canton N
- si le verrou de N est activé, le relais de commande d'arrêt sur le canton N reste désactivé
Si le canton N + 1 passe à "libre"
- on désactive le relais de commande d'arrêt sur le canton N
- on éteint la led orange en entrée du canton N
- le leds rouge et verte en entrée du canton N reprenne leur état en fonction du détecteur de N.
*/
digitalWrite(pinLed_Np1, etatNp1);
if (etatNp1){
digitalWrite(pinBM1,!etatVerrou_N);
} else {
digitalWrite(pinBM1,etatVerrou_N);
} // Fin de if (etatNp1)
} // Fin de procédure Traitement()