Merci kamill
quelqu'un pourrait analyser mon code s'il vous plait, pour savoir ou se situ l'erreur concernant ce fameux encodeur rotatif qui me fait tourner bourique
puis qu’apparemment je l'ai bien branché.
// - - - pour le codeur rotatif - - -
int val;
int PinCLK = 13;
int PinDT = 12;
static long encoderPos = -1; // Au 1er démarrage, il passera à 0
int PinCLKLast = LOW;
int nbPas = 20; // Résolution de l'encodeur
int n = LOW;
dans le setup j'ai ça :
// - - - entrée pour l'encodeur rotatif - - -
// activation des pullups internes de l'Arduino, si on n'utilise pas de pullups externes.
pinMode (PinCLK,INPUT_PULLUP);
pinMode (PinDT,INPUT_PULLUP);
dans la loop je n'ai rien
mais je lance un sous programme qui s'appel ArretProg
void ArretProg(){
digitalWrite(LEDS, HIGH); // on allume le carré
lcd.clear(); // Efface LCD
delay(10); // pour laisser temps d'effacer l'écran
milliref = millis(); // mémorisation de la valeur de millis() courante
while(time>0) { // si la tempo n'est pas fini
if (millis() > (milliref + 1000)) { // si une seconde s'est écoulée
seconde = seconde - 1; // Décrémente le comptage des secondes
time = time - 1; // Décrémente Temps total secondes
milliref = milliref + 1000; // incrémente la valeur de référence milliseconde
}
if (minute > 0) {
if (seconde < 0) {
minute--; // Décrémente une minute si le comptage des secondes arrivent à 0 et si les minutes sont sup?rieurs à 0
seconde = 59; // reset seconde à 60
}
}
if (heure > 0) {
if (minute <= 0) {
if (time == 3600 * heure - 1) {
heure--; // Décrémente une heure si le comptage des minutes arrivent à 0 et si les heures sont supérieurs à 0 et si le temps total est un multiple de 3600 seconde (1 heure)
minute = 59; // reset minutes à 60
seconde = 59;
}
}
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Extinction dans:");
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);
delay(980); // Délais de rafraichisement LCD
lcd.clear();
// en cas de mouvement du bouton rotatif
//initialisation de l'encodeur rotatif
encoderPos = 0;
n = digitalRead(PinCLK);
if ((PinCLKLast == LOW) && (n == HIGH)) {
if (digitalRead(PinDT) == LOW) {
encoderPos--;
minute = minute-30;
if ( encoderPos < 0 ) {
encoderPos = nbPas;
}
} else {
encoderPos++;
minute = minute+30;
if ( encoderPos > ( nbPas - 1 ) ) {
encoderPos = 0;
}
}
}
PinCLKLast = n;
// si on appuis sur BP arret pendant le décompte
if (digitalRead (BPARRET) == LOW){
ARRET(); //on lance le sous programe d'arret
}
// lorsque le compte à rebours est fini
if(time <= 0){
lcd.clear(); // efface l'écran
lcd.setCursor(2, 0);
lcd.print("Carre eteint"); // Affiche carré éteint
digitalWrite(LEDS, LOW); // on éteint le carré
delay(3000);
lcd.clear();
lcd.setCursor(0, 0); //on met le curseur en haut à gauche
lcd.print("Carre en attente"); //on affiche carré en attente sur la première ligne
lcd.setCursor(2, 1); //on met le curseur sur la seconde ligne de l'afficheur
lcd.print("d'activation"); //et on affiche d'activation
}
}
}
verdicts ?