#include "LiquidCrystal_I2C.h" //installer la bibliothèque LiquidCrystal_I2C.h
const int BP1 = 2; // Broche pour le premier bouton-poussoir
const int BP2 = 3; // Broche pour le deuxième bouton-poussoir
const int FR1 = 8;
const int FR2 = 9;
const int FO1 = 10;
const int FO2 = 11;
int etatFR1 = digitalRead(FR1);
int etatFR2 = digitalRead(FR2);
int etatFO1 = digitalRead(FO1);
int etatFO2 = digitalRead(FO2);
LiquidCrystal_I2C LCD1(0x27,16,2); // définit le type d'écran lcd 16 x 2
LiquidCrystal_I2C LCD2(0x27,16,2); // définit le type d'écran lcd 16 x 2
unsigned long temps = 13; // 10 secondes
unsigned long temps1 = 0; // 0 secondes
unsigned long temps2 = 0; // 0 secondes
unsigned long temps3 = 0; // 0 secondes
unsigned long dureeTotale = 0; // Durée totale en secondes
unsigned long previousMillis = 0; // Stockage des millisecondes écoulées
const long interval = 1000; // interval entre chaques clignotements
void setup() {
pinMode(BP1, INPUT_PULLUP); // Configure le bouton1 en tant qu'entrée
pinMode(BP2, INPUT_PULLUP); // Configure le bouton2 en tant qu'entrée
pinMode(FR1, OUTPUT); // configure le FR1 en tant que sortie
pinMode(FR2, OUTPUT); // configure le FR2 en tant que sortie
pinMode(FO1, OUTPUT); // configure le FO1 en tant que sortie
pinMode(FO2, OUTPUT); // configure le FO2 en tant que sortie
LCD1.init(); // initialisation de l'afficheurs
LCD2.init();
LCD1.backlight();
LCD2.backlight();
temps1 = millis();
digitalWrite(FO1, LOW);
Serial.begin(9600); // Initialisation de la communication série
}
void addtime() {
int etatBP1 = digitalRead(BP1);
int etatBP2 = digitalRead(BP2);
// Si le premier bouton est activé, ajoute 1 seconde à la durée totale
if (etatBP1 == LOW) {
temps += 1;
delay(100); // Débouncing pour éviter les rebonds du bouton
}
// Si le deuxième bouton est activé, ajoute 10 secondes à la durée totale
if (etatBP2 == LOW) {
temps += 10;
delay(100); // Débouncing pour éviter les rebonds du bouton
}
// Affiche le temps total sur le moniteur série
Serial.print("temps total (en secondes) : ");
Serial.println(temps);
// Attendez un court moment pour éviter une mise à jour excessive
delay(15);
}
void LCDun() {
LCD1.setCursor(6, 0);
int minutes = temps/60;
int secondes = temps%60;
LCD1.print(" ");
LCD1.print(minutes);
LCD1.print(':');
LCD1.println(secondes);
delay(990); // Apnée pendant une seconde...
temps--;
if (temps == 0) while(1){ // Boucle infinie si on atteint 0
LCD1.clear();
delay(990);
LCD1.setCursor(6, 1);
LCD1.print("GO");
delay(990);
LCD1.home();
delay(10);}
}
void LCDdeux() {
LCD2.setCursor(7, 0);
LCD2.scrollDisplayLeft();
int minutes = temps/60;
int secondes = temps%60;
LCD2.print(" ");
LCD2.print(minutes);
LCD2.print(':');
LCD2.println(secondes);
delay(990); // Apnée pendant une seconde...
temps--;
if (temps == 0) while(1); // Boucle infinie si on atteint 0
LCD2.clear();
LCD2.home();
delay(10);
}
void Clign1() {
digitalWrite(FR1, HIGH);
digitalWrite(FR2, HIGH);
digitalWrite(FO1, LOW);
digitalWrite(FO2, LOW);
delay(3000);
digitalWrite(FR1, LOW);
for (int i = 0; i < temps; i++) {
digitalWrite(FO1, !digitalRead(FO1));
delay(1000);
}
digitalWrite(FR1, HIGH);
}
void Clign2() {
digitalWrite(FR1, HIGH);
digitalWrite(FR2, HIGH);
digitalWrite(FO1, LOW);
digitalWrite(FO2, LOW);
delay(3000);
digitalWrite(FR2, LOW);
for (int i = 0; i < temps; i++) {
digitalWrite(FO2, !digitalRead(FO2));
delay(1000);
}
digitalWrite(FR2, HIGH);
}
void loop() {
addtime();
LCDun();
}