Calcul du nombre de chiffres d'un nombre

Bonjour

Sur mon écran LCD, j’aimerais positionner un texte selon la taille du nombre (=compteur de secondes) affiché juste devant.
Par exemple : “t = 1 s”, “t = 10 s” : le texte “s” est décalé d’un caractère après le temps décompté. Ainsi, au fur et à mesure du temps, il faudra que je décale d’un caractère le “s” sur l’écran

Avant d’aller plus loin, j’ai cherché à calculer la taille (=le nombre de chiffres) que compose un nombre et de l’afficher sauf que cela ne fonctionne pas comme prévu : le décompte s’arrête à 1, ce qui est facheux ! Je ne peux donc même pas tester si ma fonction de calcul du nombre de chiffres est exacte.
J’ai essayé ceci :

//Import des bibiliothèques nécessaires
#include<LiquidCrystal_I2C.h>   //bibliothèque pour l'écran lcd connecté en I2C

LiquidCrystal_I2C lcd(0x27, 20, 4);


unsigned long tempsZero;
unsigned long tempsCourant;
unsigned long tempsPrec;

int i = 0;

void setup()
{
  //initialisation de la liaison série, du module pH et du lcd et du capteur de température
  Serial.begin(115200);
  lcd.init(); // initialisation de l'afficheur


  //activation du rétro éclairage
  lcd.backlight();


  tempsZero = millis();

}


void loop()
{
  tempsCourant = millis() - tempsZero;
  lcd.setCursor(0, 0);
  tempsCourant /=1000;
  lcd.print(tempsCourant);
  String texte = String(taille_texte(tempsCourant));
  lcd.setCursor(0, 2);
  lcd.print(texte);
  tempsZero = millis();
  delay(1000);

}

void affiche_texte_lcd(byte caractere, byte ligne, String texte)
{
  lcd.setCursor(caractere, ligne);
  lcd.print(texte);
}

int taille_texte(int texte)
{
  int digit = 1;
  int division = texte / 10;
  while (division > 0)
  {
    int division = texte / 10;
    digit ++;
  }
  return digit;
}

Si vous pouviez m’aider à me dépatouiller (j’imagine que c’est une erreur toute bête :o )

Bonjour,

Ici tu redéfinis la variable division alors qu'elle était déjà définie.

    int division = texte / 10;

Il faut simplement utiliser la variable déjà définie

    division = texte / 10;

Bonjour,

Merci. Cela doit (sans doute) régler le calcul de la division mais mon compteur tempsCourant reste toujours bloqué à 1 maxi

Il y a une autre erreur que je n'avais pas vue
Ce doit être

    division = division / 10;

Faut lire les docs.

print() will return the number of bytes written, though reading that number is optional

print retourne le nombre de caractères écrits.

int longueur = lcd.print(tempsCourant);

longueur contiendra la longueur du texte.

Maintenant, il me semble que print avance le curseur donc deux print consécutifs devraient s’écrire l’un derrière l’autre, je pense.