bonjour à tous
alors voila, tout est dit dans le titre... j'ai une variable dans une fonction appelée à chaque passage dans loop(). Au bout de quelques tours de boucle, elle se remet à 0.
j'ai essayé de la remplacer par une variable globale, même comportement
à 3h du mat j'ai laissé tomber, là je m'y reprends la tête... sans plus de succés
dépassement de ram ? de pile ? si c'est ça, comment le voir ?
void menu_start()
{
char machin;
static char truc;
if (menu.isFirstRun()) lcd.clear();
lcd.setCursor(0,3);
if(counter) { //machin=encoderCount();
machin=counter;
//truc+=counter;
//counter=0;
Serial.println(" ");
Serial.print("counter ");Serial.print(counter,DEC);Serial.print(" machin ");
Serial.print(machin,DEC);Serial.print(" truc ");Serial.print(truc,DEC);
truc+=machin;
Serial.print(" truc+=machin ");Serial.print(truc,DEC);Serial.print(" read ");
Serial.println(encoderCount(),DEC);
lcd.print(truc,DEC); lcd.print(" "); lcd.print(machin,DEC);
}
Serial.print(truc,DEC);
if(menu.periodic(1E3)) {
//lcd.clear();
lcd.setCursor(0,0);
lcd.print(RTC.getS(DS1307_STR_FULL,false));
lcd.setCursor(0,1);
lcd.print(T[0],1); lcd.print(" ");
lcd.print(T[1],1); lcd.print(" ");
lcd.print(T[2],1); lcd.print(" ");
//lcd.print(T[3],1); lcd.print(" ");
}
if(btn.state(BTN_CLICK)) {
lcd.clear();
lcd.setCursor(0,2);
lcd.print(encoderCount(),DEC);
}
if(btn.state(BTN_LONGCLICK)) {
menu.next(menu_param);
//lcd.clear();
}
}
voila ce qui sort de ça dans le moniteur série :
0000000000000000000000000000000000000000000000000
counter -1 machin -1 truc 0 truc+=machin -1 read -1
-1-1-1-1-1-1-1-1-1
counter -1 machin -1 truc -1 truc+=machin -2 read -1
-2-2-2-2-2-2-2-2
counter 1 machin 1 truc -2 truc+=machin -1 read 1
-1-1-100000000000
counter 1 machin 1 truc 0 truc+=machin 1 read 1
11111111111111111111111111111111111111
counter -1 machin -1 truc 1 truc+=machin 0 read -1
0000
counter -1 machin -1 truc 0 truc+=machin -1 read -1
-1-1000000
counter 1 machin 1 truc 0 truc+=machin 1 read 1
11111111
counter 1 machin 1 truc 1 truc+=machin 2 read 1
2222222
counter 1 machin 1 truc 2 truc+=machin 3 read 1
333333333300000000000000000000000000000000000
counter 1 machin 1 truc 0 truc+=machin 1 read 1
11111
counter 1 machin 1 truc 1 truc+=machin 2 read 1
2222222222200
la variable concernée par le soucis c'est "truc". les variables sont des char pour économiser de la ram, mais j'avais changé par des int pour voir, même comportement. J'ai essayé de déclarer truc en global, pareil.
je ne sais plus quoi faire
le programme complet en pièce jointe
regul.zip (3.13 KB)