// // Librairies
// #include "SevSeg.h"
// // Déclaration des variables pour le code
// int current_LED;
// int timer;
// int time;
// bool nextgreen = false;
// bool greenState = false;
// bool buttonState = false;
// int step;
// int counter = 0;
// // Definition de la position physique des LEDs
// const int ledR = 10;
// const int ledO = 11;
// const int ledV = 12;
// //Definition de la position physique bouton
// const int button = 2;
// //Definition de la position physique de l'affichage 7 segments
// SevSeg sevseg; // Déclaration d’un objet SevSeg
// byte numDigits = 1; //Afficher un seul chiffre
// byte digitPins[] = {}; // Définir les broches lors de l'utilisation de l'affichage à plusieurs chiffres. Laisser vide pour afficher un seul chiffre
// byte segmentPins[] = {9,8, 7, 6, 5, 4, 3, 2}; // Définir les connexions des broches Arduino dans l'ordre: A, B, C, D, E, F, G, DP
// byte displayType = COMMON_ANODE; //Afficheur ANODE
// bool resistorsOnSegments = true; //resistances sont connectés aux broches
// void setup()
// {
// //Initialisation de l'affichage 7 segments
// sevseg.begin(displayType, numDigits, digitPins, segmentPins, resistorsOnSegments);
// sevseg.setBrightness(90);
// //Initialisation des LEDs et du bouton
// pinMode(ledR, OUTPUT);
// pinMode(ledO, OUTPUT);
// pinMode(ledV, OUTPUT);
// pinMode(button, INPUT_PULLUP);
// }
// // La fonction wait() prend le temps d'attente souhaité et la LED actuellement allumé
// // Elle permet de vérifier si le bouton a été pressé pendant les délais entre chaque LED
// // Elle active également l'afficheur 7 segments si les conditions sont vérifiés : LED verte + Bouton déjà pressé (ou actuellement pressé)
// // void wait(int time, int current_LED)
// // {
// // step = 1; // Valeur de l'incrémentation servant au délai en ms
// // timer = 0; // Initialisation du timer d'attente
// // // Tant que le timer d'attente est inferieur du temps d'attente souhaité
// // while(timer < time)
// // {
// // timer = timer + step; // On incrémente le timer
// // // // On retient si le bouton à été pressé
// // // if(digitalRead(button) == LOW)
// // // {
// // // nextgreen = true;
// // // }
// // // // Si la LED est verte et que le bouton a été préssé
// // // if(current_LED == ledV && nextgreen)
// // // {
// // // // Affichage un compte de 0 à 9
// // // for(int i = 0; i <= 10; i++)
// // // {
// // // sevseg.setNumber(i); // Affiche le chiffre
// // // sevseg.refreshDisplay(); // Reset l'affichage
// // // delay(1000); // Délai entre chaque affichage
// // // }
// // // timer = time; // Lorsque le compteur arrive à 9, on termine le temps d'attente
// // // nextgreen = false; // Initialisation pour le prochain appel de la fonction
// // // }
// // delay(step); // Délai correspondant à la valeur d'incrémentation en ms
// // }
// // }
// void waitAndDisplay(int pin, int count) {
// digitalWrite(pin, HIGH);
// counter=0;
// while(counter<count){
// counter++;
// if (digitalRead(button) == LOW){
// buttonState = true;
// }
// if(buttonState && greenState){
// for(int i = 0; i <= 10; i++)
// {
// sevseg.setNumber(i); // Affiche le chiffre
// sevseg.refreshDisplay(); // Reset l'affichage
// delay(1000); // Délai entre chaque affichage
// }
// greenState = false;
// buttonState = false;
// counter = count;
// }
// delay(1);
// }
// digitalWrite(pin, LOW);
// }
// // void loop()
// // {
// // digitalWrite(ledR, HIGH); // Allumage de la LED rouge
// // current_LED = ledR; // Initialisation de la variable actuellement allumé à rouge
// // wait(3000, current_LED); // Appel de la fonction wait(temps d'attente, LED actuelle)
// // digitalWrite(current_LED, LOW); // On etteint la LED actuellement allumé
// // // Même fonctionnement que la LED rouge avec une attente de 1000 pour la LED orange
// // digitalWrite(ledO, HIGH);
// // current_LED = ledO;
// // wait(1000, current_LED);
// // digitalWrite(current_LED, LOW);
// // // Même fonctionnement que la LED rouge avec une attente de 3000 pour la LED verte
// // digitalWrite(ledV, HIGH);
// // current_LED = ledV;
// // wait(3000, current_LED);
// // digitalWrite(current_LED, LOW);
// // }
// void loop() {
// waitAndDisplay(ledR, 3000);
// waitAndDisplay(ledO, 1000);
// greenState = true;
// waitAndDisplay(ledV, 3000);
// greenState = false;
// }
#include "SevSeg.h"
SevSeg sevseg;
int count, counter = 0;
int REDpin = 10;
int YELLOWpin = 11;
int GREENpin = 12;
int BUTTONpin = 2;
bool greenActive = false;
bool buttonState = false;
void setup(){
pinMode(REDpin, OUTPUT);
pinMode(YELLOWpin, OUTPUT);
pinMode(GREENpin, OUTPUT);
pinMode(BUTTONpin, INPUT_PULLUP);
//Afficher un seul chiffre
byte numDigits = 1;
// Définir les broches lors de l'utilisation de l'affichage à plusieurs chiffres. Laisser vide pour afficher un seul chiffre
byte digitPins[] = {};
// Définir les connexions des broches Arduino dans l'ordre: A, B, C, D, E, F, G, DP
byte segmentPins[] = {9, 8, 7, 6, 5, 4, 3};
byte displayType = COMMON_ANODE; //Afficheur ANODE
bool resistorsOnSegments = true; //resistances sont connectés aux broches
//Initialiser l'objet sevseg
sevseg.begin(displayType, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
}
void waitAndDisplay(int pin, int count) {
digitalWrite(pin, HIGH);
counter=0;
while(counter<count){
counter++;
if (digitalRead(BUTTONpin) == LOW){
buttonState = true;
}
if(buttonState && greenActive){
for(int i = 9; i > 0; i--){
sevseg.setNumber(i);
sevseg.refreshDisplay();
delay(1000);
}
greenActive = false;
buttonState = false;
counter = count;
}
delay(1);
}
digitalWrite(pin, LOW);
}
void loop() {
waitAndDisplay(REDpin, 3000);
waitAndDisplay(YELLOWpin, 1000);
greenActive = true;
waitAndDisplay(GREENpin, 3000);
greenActive = false;
}