Problème setCursor valeur

Hello tout le monde,

un peu nouveau dans le monde de l'arduino et surtout du codage lol j'ai un petit problème
Je suis actuellement sur la mise au point d'une station météo et je me retrouve un petit peu bloqué sur l'utilisation de l'afficheur 16x2 et du placement du curseur.

En effet, mon setCursor est placé sur (9,1) il reste donc assez de place pour afficher 4 caractères que le capteur me fourni ainsi que l'unité (hPa).

Mais lorsque la valeur de mon capteur passe à 3 caractères je me retrouve avec le dernier caractère vide et donc laisse un espace entre mon "hPa" et le bord de l'écran, ce que je ne veux pas.

J'aimerais donc savoir comment faire bouger le curseur en fonction du nombre de caractères ou quelque chose du genre.

Je vais mettre ici des schémas pour expliquer plus précisément ce que je veux ahah.


Ce que je ne veux pas (espace entre le dernier caractère et le bord)


Ce que je désire.


Tout en gardant la possibilité d'afficher un caractère en plus sans faire passer le "a" à la trappe.

Et voici mon code.

#include <Adafruit_BMP085.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Constants
#define DHTPIN 7 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino
const int buttonPin = 8;
int buttonState = 0;
Adafruit_BMP085 bmp;

LiquidCrystal_I2C lcd(0x27,16,2);

//Variables
int chk;
float hum; //Stores humidity value
float temp; //Stores temperature value

void setup()
{
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
bmp.begin();

}

void loop()
{
delay(5000);
hum = dht.readHumidity();
temp = dht.readTemperature();
Serial.print("Humidity: ");
Serial.print(hum);
Serial.print(" %, Temp: ");
Serial.print(temp);
Serial.println(" Celsius");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");

lcd.clear();
lcd.setCursor(0,0);
lcd.print(temp);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print(hum);
lcd.print("%");
lcd.setCursor(9,1);
lcd.print(bmp.readPressure()/100);
lcd.print("hPa");
delay(5000);
}

Merci d'avance à tous ceux qui vont m'aider :slight_smile: bonne journée.

Basile

 char s[10];
  sprintf(s, "%4dhPa", 980);
  Serial.println(s);
  sprintf(s, "%4dhPa", 1000);
  Serial.println(s);

Résultat :
980hPa
1000hPa

Essaie ça, ensuite tu affiches sur le LCD au lieu d'afficher sur le terminal.

Pour continuer le message d'Henri, tu feras :

 char s[10];
 sprintf(s, "%4dhPa", bmp.readPressure()/100);
 lcd.setCursor(9,1);
 lcd.print(s);

Bonjour,

Mets ton code entre balises de code.

Tu testes si la pression est inférieure à 1000 et tu affiches un espace

lcd.setCursor(9, 1);
  int pression = bmp.readPressure() / 100;
  if (pression < 1000)
    lcd.print(' ');
  lcd.print(pression);
  lcd.print("hPa");

Je vous remercie à tous pour vos réponses. Pour l'instant j'ai utilisé la solution de kamill car je l'ai comprise entièrement. J'aimerais des explications supplémentaires sur les fonctions (char et sprintf avec ce "%4dhPa") que vous utilisez lesept et hbachetti au cas où je devrais l'uiliser dans le futur.

Merci beaucoup.

  sprintf(s, "%4dhPa", 980);

Formate la chaîne s avec un entier qui sera complété par des blancs si la longueur est inférieure à 4.
Donc le contenu de s sera : " 980hPa".

  sprintf(s, "%04dhPa", 980);

Formate la chaîne s avec un entier qui sera complété par des zéros si la longueur est inférieure à 4.
Donc le contenu de s sera : "0980hPa".

En sachant que %f (flottants) n'est pas implémenté dans la librairie ARDUINO (trop gros).

Lorsque tu as des questions sur la syntaxe ou l'utilisation d'une fonction : la bible est ici

Pour sprintf :

sprintf
int sprintf ( char * str, const char * format, ... );
Write formatted data to string

Composes a string with the same text that would be printed if format was used on printf, but instead of being printed, the content is stored as a C string in the buffer pointed by str.

The size of the buffer should be large enough to contain the entire resulting string (see snprintf for a safer version).

A terminating null character is automatically appended after the content.

After the format parameter, the function expects at least as many additional arguments as needed for format.

C'est un peu compliqué à décoder au début, mais on s'y fait rapidement.

Pour les formats d'acriture, je les trouve habituellement sur Wikipedia mais on en trouve partout ailleurs