ciao a tutti ce qualcuno che riesce a dirmi dove sbaglio?
mi sto rompendo la testa io credo sia giusto il programma ma arduino non ne vuole sapere
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Imposta l'indirizzo del display a 0x27 per 16 caratteri per 2 linee
LiquidCrystal_I2C lcd(0x27,16,2);
int temp_min=41; // corrisponde a 0,2 volt
int temp_max=501; // corrisponde a 2,45 volt
int temp_minout=0; //corrisponde a 0°centigradi
int temp_maxout=50; // corrisponde a 50° centigradi
int raw_temp=0.00 ;// memorizza temperatura grezza
float temperatura= 0.00; // memorizza temperatura per decimali
void setup() {
pinMode(A1, INPUT);
}
void loop() {
raw_temp = analogRead(A1);
temperatura=map(rav_temp, temp_min, temp_max, temp_minout, temp_maxout);
lcd.init();//iniziali zza il display
lcd.backlight();//accensione retroilluminazione
lcd.setCursor(0, 0);
lcd.print(temperatura);
lcd.print(" 'C");
delay(500);
}
infatti ti dico che ho letteo attentamente il codice sul libro di sciamanna e non riuscivo molto a capire perchè di
quel float , ti chiedo una cortesia
io potevo evitare di usare float e memorizzare un numero con decimali in int?
Un int può contenere solo valori senza virgola, per l'appunto un intero, se servono valori con i decimali vanno usati i float, assegnare un valore con i decimali ad un int non serve a nulla, tutti i decimali vengono troncati, p.e. se scrivo "int myVar" = 12.3 myVar vale 12.
marcocagni:
io potevo evitare di usare float e memorizzare un numero con decimali in int?
byte, int, long ... sono TUTTI numeri interi SENZA decimali (... di lunghezza differente, 1, 2, 4 bytes), per i numeri con i decimali c'è il float ed il double che però, su Arduino UNO, sono la stessa cosa.
Si può usare però un "trucco" ...
... se il massimo numero decimale è, ad esempio, 99.99 lo si può considerare sempre moltiplicato per 100, ovvero massimo 9999, che è un numero intero che entra in un int (-32768 .. +32767) Con tale "trucco" avrai quindi che 10.10 sarà rappresentato come 1010, 20.05 come 2005 ecc. ecc.
Al programma poi il compito di ricavare dal numero di 4 cifre le due cifre dei decimali e le due cifre degli interi (... tutte cose che si fanno con semplici operazioni sui numeri interi).
Il vantaggio nell'usare tale trucchetto (ove possibile) è che le operazioni sugli int sono estremamente più veloci di quelle sui float
PaoloP:
Poi ti dimentichi la conversione... e la sonda si schianta su Marte.
Scherzaci, ma ... è realmente accaduto ... non che una sonda si sia schiantata su Marte, ma che abbia attivato il sistema di "auto distruzione" visto che i conti erano in overflow ! Per la cosa hanno sentitamente ringraziato il programmatore "LabVIEW™" che aveva utilizzato "l'iconcina" di una variabile ... sottodimensionata rispetto all'uso che se ne doveva fare
gpb01:
... sottodimensionata rispetto all'uso che se ne doveva fare
Guglielmo
... ok, da domani, obbligatorio utilizzare tutte le variabili in double, per evitare la possibile attivazione indesiderata dell'autodistruzione delle schede Arduino ...