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);
}
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);
}
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);
}