comme ça ne fonctionne toujours pas, j'ai décidé de passer par un mode "GelProg"
afin de geler le compte à rebours, et de la programmer, puis de relancer le compte à rebours, mais ça ne fonctionne pas...
quelqu'un à une idée ?
avant le void setup j’ai mis :
// - - - pour le codeur rotatif - - -
// - - - ATTENTION : l'encodeur est un KY 040 - - -
// le + est branché au 5V
// le GND est branché à la masse
int val;
int PinCLK = 8; //bouton CLK connécté à la broche 8
int PinDT = 9; //bouton DT connécté à la broche 9
int PinSW = A0; //bouton Switch connécté à la broche A0
static long encoderPos = -1; // Au 1er démarrage, il passera à 0
int PinCLKLast = LOW;
int nbPas = 200; // Résolution de l'encodeur
int n = LOW;
dans le void setup j’ai mis ça :
// - - - entrée pour l'encodeur rotatif - - -
pinMode (PinCLK, INPUT_PULLUP); //le bouton CLK est une entrée
pinMode (PinDT, INPUT_PULLUP); //le bouton DT est une entrée
pinMode (PinSW,INPUT_PULLUP); //le bouton SW est une entrée
dans le void loop j’ai mis ca :
if (!(digitalRead(PinSW))) {
encoderPos = 0; // Reset la position si on appui sur l'encodeur
GelProg (); //on lance le sous programe de gel du compte à rebours et de sa programmation
Et enfin le void GelProg :
void GelProg (){
// - - - initialisation de l'écran en mode programme - - -
lcd.clear();
lcd.setCursor(3, 0); // positionne le curseur à la première ligne
lcd.print("Programmez"); // Affiche programmez
lcd.setCursor(4, 1); // positionne le curseur à la seconde ligne
lcd.print("00:00:00"); // Affiche le format du Compte à rebours
// - - - lecture de l'encodeur rotatif - - -
n = digitalRead(PinCLK);
if ((PinCLKLast == LOW) && (n == HIGH)) {
if (digitalRead(PinDT) == LOW) {
//Sens antihoraire
encoderPos--;
if ( encoderPos < 0 ) {
encoderPos = nbPas;
}
} else {
//Sens horaire
encoderPos++;
if ( encoderPos > ( nbPas - 1 ) ) {
encoderPos = 0;
}
}
// - - - si encoderPos est négatif on affiche l'heure à zéro - - -
if (encoderPos <=0) {
time = 0;
heure = 0;
minute = 0;
seconde = 0;
lcd.print(heure);
lcd.print(minute);
lcd.print(seconde);
} else {
time = encoderPos * (15*60);
}
// - - - on imprime tout ça sur le LCD - - -
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Appuyez pour Go");
lcd.setCursor(4, 1);
lcd.print("00:00:00"); // Affiche le format du Compte à rebours
// Imprime les heures sur la collone 4 si ils sont supérieur à 10, et sur la colonne 5 si inférieur à 10:
if (heure >= 10) {
lcd.setCursor(4, 1);
}
else{
lcd.setCursor(5, 1);
}
lcd.print(heure);
// Imprime les minutes sur la collone 7 si ils sont supérieur à 10, et sur la colonne 8 si inférieur à 10:
if (minute >= 10){
lcd.setCursor(7, 1);
}
else {
lcd.setCursor(8, 1);
}
lcd.print(minute);
// Imprime les seconde sur la collone 10 si ils sont supérieur à 10, et sur la colonne 11 si inférieur à 10:
if (seconde >= 10){
lcd.setCursor(10, 1);
}
else {
lcd.setCursor(11, 1);
}
lcd.print(seconde);
if (!(digitalRead(PinSW))) {
ArretProg(); //on lance le sous programme d'arret temporisé
}
}
PinCLKLast = n;
}
lorsque j’appuie sur l’encodeur, l’afficheur LCD m’affiche :
Programmez
00 : 00 : 00
Mais lorsque je tourne l’encodeur… rien….
une idée ?