Choix et Affichage de la valeur entière et et flotante d'un nombre

Salut,
je suis nouveau dans le monde d'arduino. bref j'ai un problem actuellement qui m'empêche de dormer (:
j'aimerais afficher sur un lcd 16x2 und valeur analogue. L'tilisateur veut afficher (disons) la tension cad signe valeur actuelle et unité. Mais il aimerait afficher juste 3 chiffre avant la virgule et 2 après. Par example: la valeur actuelle de la tension est volts = 1234.5678. L'utilisateur donne "lcd_print_string(volts, lab[0], unity[0], 3, 2, 0, 0);". et aimerait voir sur le lcd "234.56". Est ce quelqu'un peut m'aider s'il vous plait??

merci d'avance

int val = 0;
double volts    = 1234.5678;
char *lab[2]    = {"U= ", "T= "};
char *unity[2] = {"V ", "C "};
void setup() {
  
  Serial.begin(9600);   // opens serial port, sets data rate to 9600 bps
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);

}
void loop()
{
   val=analogRead(A0);           
   volts=(val/1024.0)*5000.0; //this is an example
  
   lcd_print_string(volts, lab[0], unity[0], 5, 2, 0, 0); 
 
   delay(500);
}
// *P_str = val; ===> P_Str = &val;

void lcd_print_string(double value, char label[], char unit[], unsigned int dec_number, unsigned int dec_places, unsigned int row, unsigned int column)
{
char Out_str[10];


lcd.setCursor(column, row);
/*unsigned int width is the minimun width,unsigned int dec_places is precision, value is copied into Out_str

unsigned int width = dec_number + dec_places;
 
dtostrf(value, width, dec_places, Out_str);
lcd.clear();

lcd.print(label);
lcd.print(Out_str);
lcd.print(" ");
lcd.print(unit);
}

Bonjour,

Je ne vois pas trop l'intérêt de la chose, mais tu peux faire ceci (par exemple)

void lcd_print_string(double value, char label[], char unit[], unsigned int dec_number, unsigned int dec_places, unsigned int row, unsigned int column)
{
 char Out_str_ent[10]; // partie entière
 char Out_str_dec[10]; // partie décimale


 lcd.setCursor(column, row);
 // unsigned int width is the minimun width,unsigned int dec_places is precision, value is copied into Out_str

 dtostrf(value, dec_number, 0, Out_str_ent);
 dtostrf(value-floor(value), 0, dec_places, Out_str_dec);

 lcd.clear();

 lcd.print(label);
 lcd.print(Out_str_ent+strlen(Out_str_ent)-dec_number); // passe les chiffres ent rop
 lcd.print(Out_str_dec+1); // passe le 0 d'entête
 lcd.print(" ");
 lcd.print(unit);
 
 delay(5000);
}

Merci pour vos reponses pepe et kamill
kamil 1000 fois merci c est exactement c que je voulais ;D

Effectivement, je suis allé un peu vite :confused:
Il faut modifier

dtostrf(value, dec_number, 0, Out_str_ent);

en

dtostrf(floor(value), dec_number, 0, Out_str_ent);

En plus j'ai compliqué les choses pour rien, il y avait beaucoup plus simple

void lcd_print_string(double value, char label[], char unit[], unsigned int dec_number, unsigned int dec_places, unsigned int row, unsigned int column)
{
 char Out_str[10];

 lcd.setCursor(column, row);
 // unsigned int width is the minimun width,unsigned int dec_places is precision, value is copied into Out_str
 unsigned int width = dec_number + dec_places+1;  

 dtostrf(value, width, dec_places, Out_str);

 lcd.clear();

 lcd.print(label);
 lcd.print(Out_str+strlen(Out_str)-width); // passe les chiffres en trop
 lcd.print(" ");
 lcd.print(unit);
}

Encore merciiii a vous :slight_smile: