/*signalisation ferroviaire avec 4 cantons, suffit de rajouter des feux et des
capteurs pour plus de cantons. 2 interrupteurs pour ralentissement et rappel.
Inter 1 pour choisir ralentissement 30Km/h ou 60Km/h.
Inter 2 pour eteindre led de ralentissement et de rappel*/
int lf1a=13; //déclaration variable led blanche (oeilleton blanc)
int lf1b=12; //déclaration variable led feu 1
int lf1c=11;
int lf1d=10;
int lf1e=9;
int lf2a=8; //déclaration variable led feu 2
int lf2b=7;
int lf2c=6;
int lf3a=5; //déclaration variable led feu 3
int lf3b=4;
int lf3c=3;
int lf4a=2; //déclaration variable led feu 4
int lf4b=14;
int lf4c=15;
int lf4d=16;
int inter1=21; //déclaration variables inter1
int lecture1; //déclaration variable de lecture inter1
int inter2=19; //déclaration variables inter2
int lecture2; //déclaration variable de lecture inter2
int capteur1=50; //déclaration variable capteur1
int capteur2=45; //déclaration variable capteur2
int capteur3=40; //déclaration variable capteur3
int capteur4=35; //déclaration variable capteur4
int pir1State=LOW; //déclaration detecteur1 non actif
int val1=0; //lecture du detecteur1
int pir2State=LOW; //déclaration detecteur2 non actif
int val2=0; //lecture du detecteur2
int pir3State=LOW; //déclaration detecteur3 non actif
int val3=0; //lecture du detecteur3
int pir4State=LOW; //déclaration detecteur4 non actif
int val4=0; //lecture du detecteur4
void setup()
{
Serial.begin(9600); //ouverture port série
pinMode(lf1a, OUTPUT); //déclaration des pin (entrées/sorties)
pinMode(lf1b, OUTPUT);
pinMode(lf1c, OUTPUT);
pinMode(lf1d, OUTPUT);
pinMode(lf1e, OUTPUT);
pinMode(lf2a, OUTPUT);
pinMode(lf2b, OUTPUT);
pinMode(lf2c, OUTPUT);
pinMode(lf3a, OUTPUT);
pinMode(lf3b, OUTPUT);
pinMode(lf3c, OUTPUT);
pinMode(lf4a, OUTPUT);
pinMode(lf4b, OUTPUT);
pinMode(lf4c, OUTPUT);
pinMode(lf4d, OUTPUT);
pinMode(inter1, INPUT);
pinMode(inter2, INPUT);
pinMode(capteur1, INPUT);
pinMode(capteur2, INPUT);
pinMode(capteur3, INPUT);
pinMode(capteur4, INPUT);
digitalWrite(15, HIGH); //démarrage avec oeilleton blanc et
digitalWrite(13, HIGH); //tous les feux verts allumés
digitalWrite(10, HIGH);
digitalWrite(6, HIGH);
digitalWrite(3, HIGH);
}
void loop()
{
lecture1=digitalRead(inter1); //lecture inter1
lecture2=digitalRead(inter2); //lecture inter2
if(lecture1==0 && lecture2==0){ //si inter1 et inter2= 0
digitalWrite(9,HIGH); //leds ralentissement fixe allumée (30Km/h)
digitalWrite(16, HIGH); //leds de rappel ralentissement fixe allumée (30Km/h)
}
if(lecture1==1 && lecture2==0){ //si inter1=1 et inter2=0
digitalWrite(9,HIGH); //clignotement des leds de ralentissement et
digitalWrite(16, HIGH); //de rappel de ralentissement (60Km/h)
delay(500); //clignotement d'une seconde
digitalWrite(9,LOW);
digitalWrite(16, LOW);
delay(500);
}
else{
digitalWrite(9,LOW); //si non, on éteint les leds de ralentissement et de rappel de
digitalWrite(16,LOW); //ralentissement. Autrement dit, si inter2=1 ==> pas de ralentissement
}
val1=digitalRead(50); //lecture capteur1
if(val1==HIGH){ //si=1
digitalWrite(2,HIGH); //on allume feu rouge du signal
digitalWrite(11,HIGH); //on allume feu jaune du canton précédent
digitalWrite(6, HIGH); //on allume feu vert des autres
digitalWrite(3, HIGH);
digitalWrite(12, LOW); //on éteint tous les autres feux (sauf oeilleton blanc,
digitalWrite(10, LOW); //ralentissement et rappel ralentissement)
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(15, LOW);
digitalWrite(14, LOW);
}
val2=digitalRead(45); //lecture capteur2
if(val2==HIGH){ //si=1
digitalWrite(7,HIGH); //on allume feu rouge du signal
digitalWrite(12,HIGH); //on allume feu jaune du canton précédent
digitalWrite(15, HIGH); //on allume feu vert des autres
digitalWrite(3, HIGH);
digitalWrite(11, LOW); //on éteint tous les autres feux (sauf oeilleton blanc,
digitalWrite(10, LOW); //ralentissement et rappel ralentissement)
digitalWrite(2, LOW);
digitalWrite(8, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(14, LOW);
}
val3=digitalRead(40); //lecture capteur3
if(val3==HIGH){ //si=1
digitalWrite(4,HIGH); //on allume feu rouge du signal
digitalWrite(8,HIGH); //on allume feu jaune du canton précédent
digitalWrite(10, HIGH); //on allume feu vert des autres
digitalWrite(15, HIGH);
digitalWrite(11, LOW); //on éteint tous les autres feux (sauf oeilleton blanc,
digitalWrite(3, LOW); //ralentissement et rappel ralentissement)
digitalWrite(2, LOW);
digitalWrite(12, LOW);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(14, LOW);
}
val4=digitalRead(35); //lecture capteur4
if(val4==HIGH){ //si=1
digitalWrite(14,HIGH); //on allume feu rouge du signal
digitalWrite(5,HIGH); //on allume feu jaune du canton précédent
digitalWrite(10, HIGH); //on allume feu vert des autres
digitalWrite(6, HIGH);
digitalWrite(11, LOW); //on éteint tous les autres feux (sauf oeilleton blanc,
digitalWrite(3, LOW); //ralentissement et rappel ralentissement)
digitalWrite(2, LOW);
digitalWrite(12, LOW);
digitalWrite(15, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(4, LOW);
}
}