Bonjour. Voici le code. J'en ai fait mention dans le #14 qu'il y avait un écran 2 lignes. Désolé si je me suis mal exprimé.
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int D,N,S,N2;
int secondes = 0;
unsigned long millisecondes = 1000;
unsigned long temp = 0;
int ZERO = 1;
void setup() {
lcd.begin(16,2);
pinMode(7,INPUT); //entreé planeur en marche
pinMode(8,INPUT); //entrée enregistrement des nouvelles valeurs
pinMode(9,INPUT); //entrées - délai (D)
pinMode(10,INPUT); //entrée + délai (D)
pinMode(11,INPUT); //entrées - nombres (N)
pinMode(12,INPUT); //entrée + nombre (N)
pinMode(6,OUTPUT); //sortie tempon
pinMode(13,OUTPUT); //sortie pour cylindre pneumatique
D=0;
N=0;
N2=0;
S=0;
secondes = 0;
lcd.clear(); //effacer l'écran
lcd.backlight(); //Allumer le rétro-éclairage
EEPROM.get(0,D); //Lire mémoire de D a l'initialisation
EEPROM.get(4,N); //Lire mémoire de N à l'initialisation
}
void loop() {
if (digitalRead(8)==HIGH){ //si l'entrée 8 est activée (high), on enregistre les nouvelles valeurs
EEPROM.put(0,D); //enregistrement de la valeur D
EEPROM.put(4,N); //enregistrement de la valeur N
delay(20); //délai filtre pour rebond de l'interrupteur
}
lcd.setCursor(0,0); //positionnement du curseur de la première ligne pour affichage du mot Délai:
lcd.print("Delai:"); //afficher le mot Délai: a la position 0,0 (première ligne)
lcd.setCursor(6,0); //positionnement du curseur pour afficher la valeur de D sur la première ligne
lcd.print(D); //affichage de la valeur de D a la position 6,0
lcd.setCursor(10,0); //positionnement du curseur de la première ligne pour afficher le mot Cnt:
lcd.print("Cnt:"); //affichage du mot Cnt a la position 10,0
lcd.setCursor(0,1); //positionnement du curseur de la seconde ligne pour affichage du mot Nombres:
lcd.print("Nombres:"); //afficher le mot Nombres: a la position 0,1 (seconde ligne)
lcd.setCursor(9,1); //positionnement du curseur pour afficher la valeur de N sur la première ligne
lcd.print(N); //affichage de la valeur de N a la position 9,1
lcd.setCursor(14,0); //positionnement du curseur pour afficher la valeur de minutes sur la première ligne
lcd.print(secondes); //affichage de la valeur de minutes a la position 14,0
lcd.setCursor(14,1); //positionnement du curseur pour afficher la valeur du compteur sur la seconde ligne
lcd.print(N2); //affichage de la valeur de minutes a la position 14,1
//MODIFICATION DE LA VALEUR CORRESPONDANT AU DÉLAI//
if ((digitalRead(11)==HIGH)&&(D>=0)&&(D<60)){ //si l'entrée 11 est high et que la valeur de D est entre 0 et 60 secondes
D++; //on additionne 1 a la valeur de D
lcd.setCursor(6,0); //on affiche la valeur de D à la position 6,0 (première ligne)
lcd.print(D); //affichage de la valeur de la variable D
lcd.print(" "); ///effacement des valeurs non voulues
delay(250);} //délai filtre pour rebond de l'interrupteur sur l'entrée 11
if ((digitalRead(12)==HIGH)&&(D>0)&&(D<=60)){ //si l'entrée 12 est high et que la valeur de D est entre 0 et 60 secondes
D--; //on soustrait 1 a la valeur de D
lcd.setCursor(6,0); //on affiche la valeur de D à la position 6,0 (première ligne)
lcd.print(D); //affichage de la valeur de la variable D
lcd.print(" "); ///effacement des valeurs non voulues
delay(250);} //délai filtre pour rebond de l'interrupteur sur l'entrée 12
//MODIFICATION DE LA VALEUR CORRESPONDANT AU NOMBRE//
if ((digitalRead(9)==HIGH)&&(N>=0)&&(N<60)){ //si l'entrée 9 est high et que la valeur de N est entre 0 et 60 secondes
N++; //on additionne 1 a la valeur de N
lcd.setCursor(9,1); //on affiche la valeur de N à la position 9,1 (seconde ligne)
lcd.print(N); //affichage de la valeur de la variable N
lcd.print(" "); ///effacement des valeurs non voulues
delay(250);} //délai filtre pour rebond de l'interrupteur sur l'entrée 9
if ((digitalRead(10) ==HIGH)&&(N>0)&&(N<=60)){ //si l'entrée 10 est high et que la valeur de D est entre 0 et 60 secondes
N--; //on soustrait 1 a la valeur de N
lcd.setCursor(9,1); //on affiche la valeur de N à la position 9,1 (seconde ligne)
lcd.print(N); //affichage de la valeur de la variable N
lcd.print(" "); //effacement des valeurs non voulues
delay(250);} //délai filtre pour rebond de l'interrupteur sur l'entrée 10
//COMPTEUR CYCLES DE LUBRIFICATION 0-10 CYCLES//
while ((secondes == D)&&(N2<N)){ //si secondes=D et que N2 (nombres atteint) est plus petit que N (nombres de cycles demandés (1-10 cycles))
digitalWrite(6, HIGH); //sortie 6 devient HIGH jusqu'a la fin du cycle
digitalWrite(13, HIGH); //sortie 13 a HIGH (sortie cylindre pneumatique pour lubrification)
delay(1500); //délai sortie 13 a HIGH
digitalWrite(13, LOW); //sortie 13 a LOW (sortie cylindre pneumatique pour lubrification)
N2++; //on additionne 1 a N2
delay(1500); //délai sortie 13 a LOW
lcd.setCursor(14,1); //positionnement du curseur à la position 14 de la ligne 2
lcd.print(N2); //affichage de la valeur de la variable N2 (nombres de cycles demandés (1-10 cycles))
lcd.print(""); //effacement des valeurs non voulues
}
if (N2 == N){ //après le cycle de lubrification, on remet la sortie 6 a LOW
digitalWrite(6, LOW);
}
//COMPTEUR DU DÉLAI ENTRE LES CYCLES DE LUBRIFICATION (0-60 SECONDES)
if ((digitalRead(7)==HIGH) && (digitalRead(6) == LOW) && (millis() > temp + millisecondes)){ //Condition pour comptage
N2 = 0; //remise a zéro de N2
temp = millis();
secondes++;}
if (secondes > D){ //remise a zéro de "secondes" lorsque le setpoint est atteint
secondes = ZERO;}
lcd.setCursor(14,0);
lcd.print(secondes);
lcd.print(" ");
lcd.setCursor(14,1);
lcd.print(N2);
lcd.print(" ");
}
Jacques3012