allora riesumo la mia discussione, ho iniziato a lavorare su arduino e per adesso ho montato solo lcd e ad595 su arduino.
per lo sketch ho preso spunto sul progetto del lm35 con display che c'è su adrirobot. L'ho modificato solo per i pin digitali del lcd e il pin analogico per ad595. ho usato questo sketch perchè ad595 e LM35 danno in entrambi in uscita 10mV/C° ma se uso quello sketch posso misurare solo 110C° e per andare oltre ho dovuto modificare float vref, passandolo da 1.1 a 5 e analogReference da INTERNAL a DEFAULT e così riesco a leggere fino a 500 C°che mi bastano. Ora il mio pensiero è, queste modifiche possono portare danni all'integrato di arduino??
Posto lo sketch ancora provvisorio.
#include <LiquidCrystal.h>
/* Corrispondenza pin LCD <-> pin digitali di Arduino */
#define RS 12
#define EN 11
#define D7 2
#define D6 3
#define D5 4
#define D4 5
/* Numero del pin analogico sul quale è collegato l'AD595 */
#define AD595_pin 5
/* Definizioni globali */
float vref = 5.0; // Vref dell'ADC (quell'interno è di 1,1V)
LiquidCrystal lcd( RS, EN, D4, D5, D6, D7 ); // 'lcd' è una variabile di tipo LiquidCrystal */
/* Impostazione dell'hardware */
void setup()
{
analogReference( DEFAULT ); // per l'ADC usiamo il Vref interno da 1,1V (migliore precisione)
analogRead( AD595_pin ); // Prima lettura "a vuoto" (serve per l'assestamento dell'ADC)
lcd.begin( 4, 16 ); // Impostazione per l' LCD (4x16)
}
void loop()
{
float temp = readTemp(); // legge il valore della temperatura e la memorizza nella var. temp.
sendTempToLCD( temp ); // invia il valore al LCD
}
/* Legge la temperatura */
float readTemp()
{
float temp = 0.0; // valore convertito in temperatura (°C)
int val = 0; // valore quantizzato dall'ADC [0..1023]
int nread = 5; // numero di letture (da 5 a 8)
float somma = 0.0; // somma delle letture
for (int i=0; i<nread; i++)
{
val = analogRead( AD595_pin ); // legge il dato della tensione sul pin 'LM35_pin'
temp = ( 100.0 * vref * val ) / 1024.0; // lo converte in °C
somma += temp; // aggiunge alla somma delle temperature lette
}
return ( somma / nread ); // ne calvola il valore medio
}
/* Invia la temperatura su un LCD (modo 4bit) */
void sendTempToLCD( float temp )
{
lcd.clear(); // Pulisce lo schermo
lcd.setCursor( 0, 0 ); // Va in posizione di home: colonna 1, riga 1
lcd.print( "Temperatura FUMI");
lcd.setCursor( 0, 1 ); // Va in posizione di home: colonna 1, riga 2
lcd.print( temp ); // Stampa solo la parte intera della temp.
lcd.print( ' ' ); // Stampa uno spazio
lcd.print( (char) 223 ); // Stampa '°'
lcd.print( 'C' );
delay( 1000 );
}