aiutooooo

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 :slight_smile: :slight_smile:

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

marcocagni:
mi sto rompendo la testa io credo sia giusto il programma ma arduino non ne vuole sapere :slight_smile: :slight_smile:

... magari se ci dici anche quale è il problema e che errori ti da facciamo prima eh !

Guglielmo

E' abbastanza semplice.
Hai scritto 'rav' invece di 'raw'
Hai scritto 'lcd.init' invece di 'lcd.begin'

Ciao,
P.

lcd.begin non andrebbe messa in setup per essere eseguita solo una volta e non nel loop?

Ciao

int raw_temp=0.00  ;// memorizza temperatura grezza

Anche questo è "simpatico".

Ciao
Pippo72

ciao pippo72

perchè dici che è carina questo passaggio ?

il codice lo preso dal libro di arduino di sciamanna e ho solo inserito il display

grazie a tutti per le risposte

ho cercato e cercato ma proprio non mi sono accorto del rav scritto male nella formula a volte basta veramente poco per non far funzionare nulla

grazie anche a chi mi ha consigliato per il display a forza di leggere e leggere ho perso il controllo tra setup e loop devo riorganizzare le idee :slight_smile: :slight_smile: :slight_smile:

marcocagni:
ciao pippo72

perchè dici che è carina questo passaggio ?

Perché definire una variabile come int (intero) e assegnarli un valore float (numero con decimali) è una "asinata" :slight_smile:

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?

oppure esiste una diversa variabile?

ciao e grazie per la risposta

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) :wink: 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 :slight_smile:

Guglielmo

Poi ti dimentichi la conversione... e la sonda si schianta su Marte.

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 :stuck_out_tongue_closed_eyes:

Guglielmo

gpb01:
... sottodimensionata rispetto all'uso che se ne doveva fare :stuck_out_tongue_closed_eyes:
Guglielmo

... ok, da domani, obbligatorio utilizzare tutte le variabili in double, per evitare la possibile attivazione indesiderata dell'autodistruzione delle schede Arduino ... :smiley: :smiley: :smiley: