J'ai mis la fonction permettant de lire la mémoire libre (freeram)
J'ai 4319 en valeur affichée lors de l'appel de cette fonction.
J'ai déplacé la déclaration de la variable, à plusieurs endroits (début, milieu, fin) sans résultat.
Mon utilisation des String se limite aux échanges Série. J'ai essayé de faire le plus propre possible pour éviter les problèmes.
Tout fonctionnait très bien jusqu'à ce que j'ajoute ces quelques lignes, dans une fonction tierce...
Si je mets ces lignes en commentaire, ça fonctionne, si je les remets, la variable repasse à zéro...
Code appel freeRam, et lecture variable (appelé dans Loop()):
Serial.print("memoire:");
Serial.println(freeRam());
Serial.print("facteur:");
Serial.println(FacteurProgression);
Voilà le code de la sous-fonction, dans laquelle, en commentaire, la ligne qui pose problème.
Quand j'active cette ligne, ma variable "FacteurProgression" est à "0" alors que je l'ai initialisée à 40.
void miseajour_suppression(int numconsigne, int num){
for(int i=0;i<NbCantons;i++){
if(numero[i]==num){
numero[i]=0;
liberation(i);
//effacerLedsCanton(i);
if(occupation[num]==1){
occupation[num]=0;
ConsiA[num]=0;
ConsiN[num]=0;
RalenA[num]=70;
LimiA[num]=45;
NbTrains--;
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
String text="";
if(num<10){
text="0";
}
text=text+String(num);
lcd.print("Train N"+String((char)223)+text+" supprime");
}
Serial.print("nb de trains : ");
Serial.println(NbTrains);
envoi_occupation(NbTrains, num, 0);
}
}
if(occupation[num]==1){
envoi_consigne(numconsigne,num,0);
}
}
Et la fonction :
void effacerLedsCanton(int numero){
registersK[numero*4+2]=LOW;
registersK[numero*4+3]=LOW;
registersK[numero*4]=LOW;
registersK[numero*4+1]=LOW;
writeRegistersK();
}
Pour l'utilisation d'Arduino, si je vends mon système, je donnerai le code avec, bien-sûr.
Mais, ici, je ne l'ai pas vendu... 