Go Down

Topic: [RISOLTO]Scrivere valore di temperatura su shield "display Nokia 6100" (Read 2186 times) previous topic - next topic

lesto

Code: [Select]

void loop()
{
  val = analogRead(potPin);                 //Leggo la temperatura da analogica
  temperature = (5.0*val*100.0/1024.0);       //converto la tensione in temperatura
  sprintf(buffer,"Gradi: %f.2", temperature );
  Serial.println (buffer);             //scrivo su seriale
  lcd.setStr(buffer, 50, 20, SLATE, RED); // scrivo su display Nokia 6600
}


notare i .0 sul calcolo: forzano l'operazione matematica ad essere fatta con i float e non con i numeri interi, altrimenti la parte dopo la virgola verrebbe troncata! (vale nel caso val sia long o int, se float non serve ma sempre meglio specificare una volta in più che una volta in meno, sono il genere di errori stupidi che fanno perdere giornate anche ai programmatori più esperti)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

matrix77

Hai ragione Lesto, i decimali non erano presi in considerazione, adesso funzionano.......sono in debito di parecchi caffè.

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

lesto

dimenticavo:

sprintf(buffer,"Gradi: %f.2", temperature );

il %f.2 vuol dire che vuoi visualizzare solo 2 decimali. scrivere solo %f usa i decimali che gli servono (mi pare il massimo sia 9 decimali) ma tanto la precisione è limitata sia dal sensore che dall'ADC arduino, quindi direi che 2 decimali sono il giusto.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

matrix77


dimenticavo:

sprintf(buffer,"Gradi: %f.2", temperature );

il %f.2 vuol dire che vuoi visualizzare solo 2 decimali. scrivere solo %f usa i decimali che gli servono (mi pare il massimo sia 9 decimali) ma tanto la precisione è limitata sia dal sensore che dall'ADC arduino, quindi direi che 2 decimali sono il giusto.

Ah ok, ma perdona la mia domanda io ho fatto così, ma va bene lo stesso vero?
sprintf(buffer,"Gradi: %d.%d", temp1, temp2);
E' meglio eliminare i due interi?
Ciao

lesto

non cambia molto, è solo una questione di leggibilità del codice e risparmio delle risorse; 2 variabili int in meno, ovvero 4 byte di ram, e un po' di operazioni matematiche in meno.

in oltre col tuo loop di prima alla prima stampa buffer è vuoto perchè deve essere ancora fatta la sprintf, nulla di grave se hai inizializzato a ""
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie


Go Up