#include <OneButton.h> // inclure la bibliothèque OneButton.h pour gérer les boutons
#include <LiquidCrystal_I2C.h> // inclure la bibliothèque LiquidCrystal_I2C.h pour gérer le LCD
LiquidCrystal_I2C lcd(0x27, 20, 4); // adresse du LCD i2c , nombre de colonnes, nombre de lignes de l'écran
int seuil_fourbas = 21; // je décide de démarrer le comptage de l'incrémentation des température basses à 21°
int seuil_fourhaut = 23; // je décide de démarrer le comptage de l'incrémentation des température hautes à 23°
const byte pinbtn1 = 9, pinbtn2 = 8, pinbtn3 = 7, pinbtn4 = 6 ; // je déclare les broches où sont reliés mes boutons
const unsigned long entreDeuxNotifications = 500; // temps entre 2 notifications sur le moniteur série et rapidité de l'incrémentation sur le LCD.
const unsigned long dureeMinPourAppuiLong = 500; // durée minimum pour que l'appui long soit pris en compte
OneButton bouton1(pinbtn1); // création d'une variable nommée bouton1, du type OneButton, qui est initialisée en utilisant le N° de la broche pinbtn1 (9)
OneButton bouton2(pinbtn2);
OneButton bouton3(pinbtn3);
OneButton bouton4(pinbtn4);
unsigned long chronoAppui; // ??????? déclare que l'on va utiliser le compteur millis ??????????
void appui1() { // Fonction qui détermine ce qui se passe lors d'un appui simple
seuil_fourbas --;
}
void appui2() {
seuil_fourbas ++;
}
void appui3() {
seuil_fourhaut --;
}
void appui4() {
seuil_fourhaut ++;
}
void pendantAppuiLong1() { // Fonction qui détermine ce qui se passe lors d'un appui long
seuil_fourbas -= 10;
}
void pendantAppuiLong2() {
seuil_fourbas += 10;
}
void pendantAppuiLong3() {
seuil_fourhaut -= 10;
}
void pendantAppuiLong4() {
seuil_fourhaut += 10;
}
void setup() {
lcd.init(); // initialisation du LCD
lcd.backlight(); // active le rétroéclairage
//bouton1.setup(pinbtn1, INPUT_PULLUP, true); // à priori sans intérêt avec OneButton
//bouton2.setup(pinbtn2, INPUT_PULLUP, true);
//bouton3.setup(pinbtn3, INPUT_PULLUP, true);
//bouton4.setup(pinbtn4, INPUT_PULLUP, true);
bouton1.setDebounceMs(-25); // temps d'attente de l'antirebond (temps qui s'écoule pour q'un changement d'état du bouton soit validé en front montant comme en front descendant.
bouton2.setDebounceMs(-25);
bouton3.setDebounceMs(-25);
bouton4.setDebounceMs(-25);
bouton1.setPressMs(dureeMinPourAppuiLong); // pour chaque bouton, on détermine la durée minimum pour que l'appui long soit pris en compte. Elle a été fixée en début de programme à 500ms.
bouton2.setPressMs(dureeMinPourAppuiLong);
bouton3.setPressMs(dureeMinPourAppuiLong);
bouton4.setPressMs(dureeMinPourAppuiLong);
bouton1.setLongPressIntervalMs(entreDeuxNotifications); // pour chaque bouton, on détermine le temps entre 2 notificationssur le moniteur série et la rapidité de l'incrémentation sur le LCD. Elle a été fixée en début de programme à 500ms.
bouton2.setLongPressIntervalMs(entreDeuxNotifications);
bouton3.setLongPressIntervalMs(entreDeuxNotifications);
bouton4.setLongPressIntervalMs(entreDeuxNotifications);
bouton1.attachPress(&appui1); // On précise que l'action du bouton 1 est déterminée dans la "void appui1"
bouton2.attachPress(&appui2);
bouton3.attachPress(&appui3);
bouton4.attachPress(&appui4);
bouton1.attachDuringLongPress(pendantAppuiLong1);
bouton2.attachDuringLongPress(pendantAppuiLong2);
bouton3.attachDuringLongPress(pendantAppuiLong3);
bouton4.attachDuringLongPress(pendantAppuiLong4);
}
void loop() {
bouton1.tick(); // On lit en permanence le bouton connecté à la broche 9 et le programme agit en conséquence.
bouton2.tick();
bouton3.tick();
bouton4.tick();
lcd.setCursor(0, 1); // mettre le curseur sur la première conlone, deuxième ligne
lcd.print ("Seuil Bas = ");
lcd.print (seuil_fourbas); // le LCD imprime la valeur à laquelle l'alarme Froide a été programmée.
lcd.print((char)223); // symbole °
lcd.print("C");
lcd.print(" ");
lcd.setCursor(0, 2); // mettre le curseur sur la première conlone, deuxième ligne
lcd.print ("Seuil Haut = ");
lcd.print (seuil_fourhaut); // le LCD imprime la valeur à laquelle l'alarme Chaude a été programmée.
lcd.print((char)223);
lcd.print("C");
lcd.print(" ");
}