Numeri Interi

Ciao a tutti, sto leggendo la temperatura del sensore olio della mia vettura, arduino mi da il valore con i decimali, io voglio ottenere un numero intero, ad esempio adesso esce 82,56°C io vorrei che uscisse solo 82°C ecco il codice:

#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
unsigned long time;
void setup() {

  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Olio:");
  lcd.setCursor(7,1);
  lcd.print("V");

  

}


void loop() {
  
  float tOlio = 0;
  float v3 = 0;
  float v2 = 0;
  int sensorValue = analogRead(A0);
  float voltage = 0; 
  voltage = sensorValue * (5.0 / 1023.0);
  v3=pow(voltage,3);
  v2=pow(voltage,2);
  tOlio = 152.51-(2.1574*v3)+(18.002*v2)-(70.659*voltage);
  lcd.setCursor(11,0);
  lcd.print(tOlio);
  lcd.setCursor(0,1);
  lcd.print(voltage,3);
  delay(500);
 

  
  }

E' tutto scritto nel Reference ;) http://arduino.cc/en/Reference/IntCast

Risolto! grazie millle! un altra cosa, il voltaggio letto dal arduino è un pò "ballerino" mentre se lo misuro con il tester è stabile, come tempo di "lettura" ho provato a giocare un pò con il delay ma cambia poco e nulla, da cosa dipende?

Ti do un paio di consigli:

  1. collega il pin AREF di Arduino a massa mediante un condensatore ceramico da 100 nF, aiuta a stabilizzare la lettura del convertitore analogico;
  2. al posto di una singola lettura del pin analogico, prova mettendone 5/10 in rapida successione. Il convertitore è ottimizzato per una impedenza d’ingresso di 10K , se quella del tuo segnale è maggiore potrebbe non avere tempo sufficiente per caricare il circuito interno.
    Quindi invece di
 int sensorValue = analogRead(A0);

fai così:

int sensorValue;
for (byte i = 0; i < 10; i++) {
  sensorValue = analogRead(A0);
}

Alla fine del ciclo for, l’ultima lettura del pin sarà dentro sensorValue.

Grazie mille per la riposta, adesso ho modificato il codice come l'hai postato sopra,in poche parole adesso fa 10 letture al secondo? ...appena ho tempo vado in macchina a provare, il condensatore non c'è l'ho , vedo come si comporta così, se migliora lo tengo così com'è altrimenti mi procuro il condensatore :)

Hai un delay(500), quindi in teoria fa 10 letture al secondo. Puoi ridurre il contatore del ciclo for se vedi che ti bastano 3/4/5 letture. Ricordati il condensatore su AREF.

Ah quindi il condensatore è obbligatorio per avere una lettura stabile? devo implementare qualche comando oppure semplicemente metto il pin AREF a massa con il condensatore? per la massa uso quella accanto?

Se vuoi una lettura stabile il condensatore diciamo che è obbligatorio. Puoi collegarlo tra AREF ed il vicino pin 22 del micro, che è GND. A livello software non devi fare niente.

Ti rimando qui, comunque: http://arduino.cc/en/Reference/AnalogReference

perfetto allora mi procuro questo condensatore da 100nF e lo incastro sul pin AREF e GND! Grazie Mille delle Dritte!

Visto che lo devi comprare, comprane qualcuno in più perché servono sempre come condensatori di disaccoppiamento.

Perfetto! ultima domanda, questo condensatore va ad influire su tutti e 5 i pin analogici? perchè dopo dovrei collegare un altro sensore su un altro pin, oppure sarà già stabile con quel condensatore tra GND e AREF?

Il condensatore stabilizza l'ADC quindi tutte le letture saranno più precise.

Per Leo:

scusami, ma il condensatore da 100nF è già presente sia nella UNO che nella MEGA.

Mettendone in parallelo un'altro si abbassa la capacità complessiva a 50nF: a cosa serve?

Nel datasheet del processore è indicato un filtro LC da applcare su AREF (L = 10uH e C = 100nF) con L tra +Vcc e AREF e C tra AREF e ground.

Probabilmente poiché Arduino prevede anche un riferimento interno (1.1V, 3.3V e 5V) è stato omesso l'induttore.

Ragazzi purtroppo il problema non era quello, ho provato ad alimentare arduino con il cavo usb e il portatile in macchina leggeva benissimo e senza imprecisioni! invece quando lo collego alla 12v della macchina inizia a diventare impreciso, sintomo che la 12v che poi arriva a 14,8v ha il segnale “sporco” … come posso fare per avere una tensione pulita?

non ce l'hai a portata uno di questi per provare? http://www.motostorm.it/scheda_prodotto.asp?articolo=4334&ref=Google&gclid=CLqLiuSSgrcCFU5b3godiCwA4A In teoria essendo per cellulari dovrebbero essere abbastanza stabilizzati e filtrati, se lo prendi made in china a 1 euro lascia pure perdere :)

ciao

Si ho già provato ma anche con quello il voltaggio "balla"

Genesis46: il voltaggio "balla"

Bhe a questo punto metti 2 luci psiche in auto e balla anche tu :D :D :D .... scherzo :grin:

Mettere il tutto dentro una scatoletta in metallo e collegarla alla massa dell'auto? Un condensatore da 100nf sull'alimentazione? Utilizzare un anello in ferrite facendogli fare un giro al cavo di alimentazione?

schemi per alimentatori stabilizzati ce ne sono a gogo, è inutile che te li dico :) Molti post in questo forum spiegano quali fattori ci devono essere per avere una precisione pressochè affidabile sugli input analog, devi avere un po' di pazienza e cercare

ciao

cyberhs: Per Leo:

scusami, ma il condensatore da 100nF è già presente sia nella UNO che nella MEGA.

Gasp... è vero. Ragiono sempre in termini di standalone e mi scordo invece degli utenti che dicono di usare l'ARDUINO... :sweat_smile: