Presque EUREKA ....!
je parvient à faire varier mon compte à rebours grace à l'encodeur rotatif.
mais...
je n'arrive pas à le faire repartir.
please, help...
voici le sous programme qui permet de faire varier le compte à rebours :
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 - - -
while ((digitalRead(PinSW))) {
n = digitalRead(PinCLK);
if ((PinCLKLast == LOW) && (n == HIGH)) {
if (digitalRead(PinDT) == LOW) {
//Sens antihoraire
encoderPos--;
minute = minute - 15;
if ( encoderPos < 0 ) {
encoderPos = nbPas;
minute = 0;
heure --;
}
} else {
//Sens horaire
encoderPos++;
minute = minute + 15;
if ( encoderPos > ( nbPas - 1 ) ) {
encoderPos = 0;
}
}
time = (seconde + (60 * minute) + (3600 * heure));
Imprime (); // on lance le sous programme d'impression sur le LCD
}
PinCLKLast = n;
}
}
void Imprime (){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Appuyez pour Go");
lcd.setCursor(4, 1);
lcd.print("00:00:00"); // Affiche le format du Compte à rebours
// Limite des minutes et des heures
if (minute > 59){
minute = 0;
heure ++;
}
if (minute < 0){
minute = 0;
heure --;
}
if (heure < 0){
heure = 0;
}
// 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(10); // Délais de rafraichisement LCD
}
et le sous programme qui permet le décompte:
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) { // tant que 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 d'appuis sur le bouton rotatif
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
}
// 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
}
}
}
question : comment lier les deux pour faire repartir le compte à rebours en appuyant sur le bouton de l'encodeur ?
digitalRead(PinSW)
une idée ?