Ecran LCD placer le nombre à droite

Bonjour à tous,

Je suis nouveau, merci pour l'acceuil et desolé pour les plus chauvins si mon sujet n'est pas au bon endroit...

Je souhaiterai placer mon nombre à droite sur mon écran lcd c'est à dire que le dernier chiffre reste à droite et celui des dizaine à gauche et ainsi de suite. Sachant que c'est un compteur qui s'incremente geance à un bouton. J'utilise une carte arduino uno avec un écran lcd i2c.
Merci pour votre aide

la fonction sprintf() permet de créer du texte à partir de nombre et gère l'alignement et le padding.

un exemple:

void setup() {
  Serial.begin(115200);
  for (long i = 1; i < 150000; i *= 2) {
    char buffer[20]; // s'assurer qu'il est assez grand pour le texte
    snprintf(buffer, sizeof buffer, "% 8ld", i); // padding avec des espaces sur 8 positions
    Serial.println(buffer);
  }

}

void loop() {}

la sortie sur le moniteur

       1
       2
       4
       8
      16
      32
      64
     128
     256
     512
    1024
    2048
    4096
    8192
   16384
   32768
   65536
  131072

pour des entiers, ça fonctionne sur tous les arduinos

C'est pas du chauvinisme. C'est juste que la section "Tutoriels et cours" c'est prévu pour les tutoriels et les cours. Message déplacé.

Ce n'est pas précisé mais je suppose que tu utilises la librairie LiquidCrystal.
Elle te permet de positionner le curseur où tu veux avant d'écrire avec setCursor().
Tu peux déterminer la position du début de l'écriture en testant si la valeur à écrire est supérieure à 10, 100, 1000, ...

attention cependant si le nombre peut aussi diminuer, si on écrit 1000 par exemple et qu'ensuite on veut écrire 999, on verra 1999 si on ne prend pas le soin d'effacer le 1 du 1000 qu'on avait avant en première position.

l'avantage de sprintf() c'est qu'il met des espaces en padding donc on écrit toujours au même endroit et ça efface ce qu'il y avait avant. L'inconvénient c'est que c'est une fonction gourmande en mémoire flash par rapport à faire des if et setCursor()

Merci à vous tous pour vos réponse rapide;

J'utile la librairies LiquidCrystal_i2c 16x2
Pour etre plus precis, j'utilise un bouton pour l'incremention, c'est pour compter de 0 à 200000. le chiffre s'affiche à gauche et mon symbole d'unité est à droite (trop d'ecart).
voia mon problème

voici un exemple

le code
#include <Wire.h>
#include <hd44780.h> //  https://github.com/duinoWitchery/hd44780
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header

#include <Toggle.h>   // https://github.com/Dlloydev/Toggle

// LES 2 BOUTONS
const byte brochePlus = 2;
const byte brocheMoins = 3;
Toggle boutonPlus, boutonMoins;

// LE LCD
hd44780_I2Cexp lcd;
const int nbCols = 16;
const int nbLignes = 2;

// LE COMPTEUR
long compteur = 0;
const char unite[] = " mg";
const byte longueurUnite = sizeof unite - 1;

void afficherCompteur() {
  static long compteurSurLCD = -100000;
  const int tailleChampCompteur = 6;
  char format[10]; // on fabrique dynamiquement le format de sprintf "%+ 6d", la notation * ne fonctionne pas sur UNO
  char buffer[nbCols + 1]; // +1 pour le caractère nul de fin de chaîne
  if (compteurSurLCD != compteur) {
    snprintf(format, sizeof format, "%%+ %dd", tailleChampCompteur+1); // on fabrique un format avec la bonne dimension
    snprintf(buffer, sizeof buffer, format, compteur);
    lcd.setCursor(nbCols - tailleChampCompteur - longueurUnite, 0); 
    lcd.print(buffer);
    compteurSurLCD = compteur;
  }
}

void setup() {
  Serial.begin(115200);
  boutonPlus.begin(brochePlus);
  boutonMoins.begin(brocheMoins);

  int result = lcd.begin(nbCols, nbLignes);
  if (result) {
    Serial.print("LCD initialization failed: ");
    Serial.println(result);
    hd44780::fatalError(result);
  }
  lcd.clear();
  lcd.print(F("Tare : "));
  afficherCompteur(); // va positionner le curseur juste après le nombre
  lcd.print(unite);
}

void loop() {
  boutonPlus.poll();
  if (boutonPlus.onPress()) {
    compteur++;
    afficherCompteur();
  }

  boutonMoins.poll();
  if (boutonMoins.onPress()) {
    compteur--;
    afficherCompteur();
  }
}

j'utilise la bibliothèque hd44780 pour l'écran, elle est bien meilleure que LiquidCrystal_i2c.

Pour la gestion du bouton, j'utilise Toggle.

j'ai mis un bouton plus et un bouton moins.

la taille du champ pour le nombre est une constante (tailleChampCompteur) et donc pour le sprintf() je fabrique le format "%+ 6d" dynamiquement avant de l'utiliser dans la fonction pour imprimer au bon endroit mon compteur. Le '+' dans le format dit que l'on veut toujours afficher le signe (si c'est positif on aura par exemple "****+42" et si c'est négatif "****-42" par exemple où les * seront des espaces)