Pour le TP Nr 2 du MOOC arduino, Il est indiqué qu'en dehors du fonctionnement normal, si on appuie sur le bouton pendant que le feu voiture est vert, alors on active le feu pieton.
J'ai écrit ça:
Code : Tout sélectionner
const int buttonPin = 2; // pin bouton
int buttonState = 0; // état du bouton
const int rv = 12; // pin LED rouge voiture
const int ov = 11; // pin LED orange voiture
const int vv = 10; // pin LED vert voiture
const int rp = 9; // pin LED rouge pieton
const int vp = 8; // pin LED vert pieton
void setup() {
// on définit les pins des diodes comme sorties
pinMode(rv, OUTPUT);
pinMode(ov, OUTPUT);
pinMode(vv, OUTPUT);
pinMode(rp, OUTPUT);
pinMode(vp, OUTPUT);
// on définit la pin du bouton comme entrée
pinMode(buttonPin, INPUT);
}
void loop(){
// initialisation feu pieton
digitalWrite(vp, LOW); // vert pieton éteint
digitalWrite(rp, HIGH); // rouge pieton allumé
// mode mormal
digitalWrite(vv, LOW);
digitalWrite(ov, HIGH);
delay(1000);
digitalWrite(ov, LOW);
digitalWrite(rv, HIGH);
delay(3000);
digitalWrite(rv, LOW);
digitalWrite(vv, HIGH);
// passage mode pieton si appuie sur bouton pendant le feu vert.
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(vv, LOW);
digitalWrite(ov, HIGH);
delay(1000);
digitalWrite(ov, LOW);
digitalWrite(rv, HIGH);
digitalWrite(vp, HIGH);
delay(5000);
}
else { // sinon, on attend 3 secondes
delay(3000);
}
// retour mode normal en redemarrant la boucle.
}
Si on appuie sur le bouton alors que le feu vert voiture est déjà allumé, alors on repars pour un tour de cycle normal avant de déclencher le cycle piéton. En plus si on lâche le bouton avant que le feu voiture repasse au vert, on repart à nouveau pour un tour.
Comment on pourrait gérer que quelque soit le moment où l'on appuie pendant les 3 secondes de feu vert, alors on lance la séquence piéton ?