// Feu pour pieton simple int carRed = 3; // assigner les lumieres feu voie int carYellow = 4; int carGreen = 5; int pedRed = 8; // assigner les lumieres feu pieton int pedGreen = 9; int button = 12; // bouton appel pieton int crossTime = 500; // temps pour traverser unsigned long changeTime; // time since button pressed void setup() { pinMode(carRed, OUTPUT); // variable sortie pinMode(carYellow, OUTPUT); pinMode(carGreen, OUTPUT); pinMode(pedRed, OUTPUT); pinMode(pedGreen, OUTPUT); pinMode(button, INPUT); // variable entree // allumer les lumieres verte auto et rouge pieton digitalWrite(carGreen, HIGH); digitalWrite(pedRed, HIGH); } void loop() { int state = digitalRead(button); /* tester si bouton presse et si temps depuis dernieres pression superieur a 5s */ if (state == HIGH && (millis() - changeTime) > 5000) { // appelle la fonction changer lumieres changeLights(); } } // fonction changer lumieres void changeLights() { digitalWrite(carGreen, LOW); // vert off digitalWrite(carYellow, HIGH); // jaune on delay(2000); // attendre 2 secondes digitalWrite(carYellow, LOW); // jaune off digitalWrite(carRed, HIGH); // rouge on delay(1000); // attendre 1 seconde digitalWrite(pedRed, LOW); // rouge pieton off digitalWrite(pedGreen, HIGH); // vert pieton on delay(crossTime); // attendre temps traverse // clignoter vert pieton for (int x=0; x<10; x++) { digitalWrite(pedGreen, HIGH); delay(250); digitalWrite(pedGreen, LOW); delay(250); } // allumer rouge pieton digitalWrite(pedRed, HIGH); delay(500); digitalWrite(carYellow, HIGH); // jaune on digitalWrite(carRed, LOW); // rouge off delay(1000); digitalWrite(carGreen, HIGH); digitalWrite(carYellow, LOW); // jaune off // memorise temps derniere pression pieton changeTime = millis(); // et retourne a la boucle du programmme }