Menu pour réglages des paramètres, besoin d'aide

l'approche classique c'est d'effacer ce qui était écrit avant d'écrire la nouvelle valeur.
un hack c'est de se dire que la plus grosse valeur tient sur 5 digits par exemple et donc avant d'afficher on efface 5 positions (on met un espace) puis on revient au début et on affiche ce que l'on veut

par exemple quand je vois

lcd.setCursor(7,0);        
lcd.print(tempora);
lcd.setCursor(13,0);
lcd.print(" ms");

je me dis que vous avez réservé les caractères de 7 à 12 pour l'affichage du nombre. donc on ferait

lcd.setCursor(7,0);
lcd.print("      "); // efface de 7 à 12        
lcd.setCursor(7,0);
lcd.print(tempora);
lcd.setCursor(13,0);
lcd.print(" ms");

une autre approche c'est de mettre quelques espaces après l'affichage de la valeur, comme cela ça efface ce qui traine (mais c'est possible que si on a la place derrière)

lcd.setCursor(7,0);
lcd.print(tempora);
lcd.print("   "); // efface un peu      
lcd.setCursor(13,0);
lcd.print(" ms");

une autre approche est de fabriquer une chaîne de caractère toujours de la même longueur avec un padding d'espace au début.

par exemple faites tourner ce code et regardez l'affichage dans le moniteur série à 115200 bauds


void setup() {
  Serial.begin(115200); Serial.println();
}

void loop() {
  char message[20];
  int tempora = random(0, 30000);
  snprintf(message, sizeof message, "%5d ms", tempora);
  Serial.print("[");
  Serial.print(message);
  Serial.println("]");
  delay(100);
}

vous devriez voir quelque chose comme cela:

[16807 ms]
[25249 ms]
[10073 ms]
[13658 ms]
[28930 ms]
[21272 ms]
[17544 ms]
[  878 ms]
[27923 ms]
[27709 ms]
[ 4440 ms]
[ 8165 ms]
[24492 ms]
[23042 ms]
...

on voit que le chiffre est bien cadré à droite et que des espace sont insérés avant. Le message a donc toujours la même longueur (mais utiliser sprintf() est coûteux en mémoire programme et ne supporte pas les nombre à virgule sur AVR)

1 Like