/*
TP bouton pressoir / feux tricolores piétons - semaine 3 mooc fabrication numérique
Feu tricolore (merci gégé pour la correction)
Une LED rouge allumée pendant 3 secondes => ftr
Une LED jaune allumée pendant 1 seconde => ftj
Une LED verte allumée pendant 3 secondes => ftv
Feu bicolore (piéton)
Le feu piéton est constamment rouge tant que le bouton n'est pas appuyé
Si le bouton est appuyé Le feu tricolore passe au orange allumé pendant 1 seconde puis rouge pendant 5 secondes durant lesquelles le feu vert piéton passe au vert
Après ces 5 secondes, le feu piéton repasse au rouge et le fonctionnement normal reprend
Feu pieton rouge => fpr
Feu pieton vert => fpv
*/
// const signifie constant => non modifiable
// Déclare une constante (const) de type entier (int) appelée buttonPin
// set pin numbers:
const int buttonPin = 2; // buttonPin a pour valeur 2
const int ftr = 12; // feu tricolore rouge a pour valeur 12
const int ftj = 11; // feu tricolore jaune a pour valeur 11
const int ftv = 10; // feu tricolore vert a pour valeur 10
const int fpr = 9; // feu piéton rouge a pour valeur 9
const int fpv = 8; // feu piéton vert a pour valeur 8
// variable qui change (puisqu'il n'y a pas la const marqué derrière)
int buttonState = 0; // la valeur de buttonState pour changer pendant l'exécution du programme
// le bloc setup contient les instructions qui doivent être executées au début
void setup() {
// pinMode permet de spécifier si une broche est une entrée ou une sortie
pinMode(ftr, OUTPUT);
pinMode(ftj, OUTPUT);
pinMode(ftv, OUTPUT);
pinMode(fpr, OUTPUT);
pinMode(fpv, OUTPUT);
// les leds sont en sortie puisque du courant va sortir pour l'alimenter
pinMode(buttonPin, INPUT);
// le buttonPin est une entrée puisqu'il va recevoir du courant
}
void loop(){
// digitalReand est une fonction qui va aller lire la valeur d'une broche (ici buttonPin=2)
if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
// le code vérifie que le bouton n'est pas déjà été appuyé et dans ce cas il vérifie l'état du bouton
// feu pieton vert éteind :
digitalWrite(fpv, LOW);
// feu pieton rouge tout le temps allumé
digitalWrite(fpr, HIGH);
if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
// feu tricolore vert allumé pendant 3 secondes puis s'éteind
digitalWrite(ftv, HIGH);
delay(3000);
digitalWrite(ftv, LOW);
if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
// feu tricolore jaune allumé pendant 1 seconde puis s'éteind
digitalWrite(ftj, HIGH);
delay(1000);
digitalWrite(ftj, LOW);
if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
// feu tricolore rouge allumé pendant 3 secondes)
// feu tricolore rouge pendant 5 secondes
digitalWrite(ftr, HIGH);
digitalWrite(fpv, HIGH);
// feu pieton rouge s'éteind
digitalWrite(fpr, LOW);
delay(3000);
digitalWrite(ftr, LOW);
digitalWrite(fpv,LOW);
digitalWrite(fpr, HIGH);
if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
// Si le bouton est pressé (cad si on reçoit du courant sur la broche 2)
if (buttonState == HIGH) {
buttonState=LOW; // le code teste si le bouton est appuyé ou pas. Permet de forcer le fait que le bouton a été relaché
// feu tricolore jaune pendant 1 seconde
digitalWrite(ftj, HIGH);
delay(1000);
digitalWrite(ftj, LOW);
// feu tricolore rouge pendant 5 secondes
digitalWrite(ftr, HIGH);
digitalWrite(fpv, HIGH);
// feu pieton rouge s'éteind
digitalWrite(fpr, LOW);
delay(5000);
digitalWrite(ftr, LOW);
digitalWrite(fpv,LOW);
// feu tricolore vert s'eteind
digitalWrite(ftv, LOW);
}
}