ciao a tutti!
ho realizzato con arduino un "termometro" che visualizza su display temperatura e umidità interna e temperatura esterna, il tutto funziona correttamente finchè non ho aggiunto un pulsante che quando premuto mi permette di visualizzare o la temperatura e umidità interna o la temperatura esterna, praticamente quando il pulsante viene premuto il display viene cancellato per la nuova visualizzazione e fin qui tutto bene, il problema sta nel fatto che anche senza premere il pulsante il display si cancella automaticamente visualizzando prima la temperatura e umidità e poi si cancella di nuovo e visualizza la temperatura esterna. cosi va avanti all'infinito e se premo il pulsante non succede nulla.
il pulsante l'ho collegato come nello schema elettrico del tutorial di arduino : http://arduino.cc/en/tutorial/button
vi posto il codice.
#include "DHT.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Ventola= 9;
int LM35= A1;
int TempCest;
int pulsante= 7;
int mediaValori[10];
int somma;
int i = 0;
#define DHTPIN A0
#define DHTTYPE DHT11
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
lcd.begin(16, 2); //Impostazione del numero di colonne e righe del display LCD
lcd.setCursor(0,0); //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
lcd.print("Temp:"); //Stampo il messaggio 'Temperatura:' sulla prima riga
lcd.setCursor(0, 1);
lcd.print("umidita:");
analogReference(INTERNAL);
pinMode(Ventola, OUTPUT);
pinMode(pulsante, INPUT);
}
void loop() {
analogRead(LM35);
int h = dht.readHumidity(); //lettura umidità h
int t = dht.readTemperature(); //lettura temperatura t
if (isnan(t) || isnan(h)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ERRORE");
} else {
lcd.clear();
lcd.setCursor(0,0); //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
lcd.print("Temp:"); //Stampo il messaggio 'Temperatura:' sulla prima riga
lcd.setCursor(0, 1);
lcd.print("umidita:");
lcd.setCursor(10, 1);
lcd.print(h);
lcd.print(" %\t");
lcd.setCursor(6, 0);
lcd.print(t);
lcd.print(" C");
}
if(t>=25){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ATTENZIONE");
analogWrite(Ventola,255);
}
else{
analogWrite(Ventola,0);
lcd.clear();
lcd.setCursor(0,0); //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
lcd.print("Temp:"); //Stampo il messaggio 'Temperatura:' sulla prima riga
lcd.setCursor(0, 1);
lcd.print("umidita:");
lcd.setCursor(10, 1);
lcd.print(h);
lcd.print(" %\t");
lcd.setCursor(6, 0);
lcd.print(t);
lcd.print(" C");
}
delay(1000);
for(i=0;i<10;i++){
mediaValori[i]=analogRead(LM35);//lettura analogica dal sensore di temperatura
delay(100);//ritardo 0.1 secondi
}
somma=0;
for(int i=0;i<10;i++)
somma=(somma + mediaValori[i]);
TempCest=somma/10;
TempCest=TempCest/9.31;
pulsante= digitalRead(pulsante);
if(pulsante == HIGH){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp E");
lcd.setCursor(7, 0);
lcd.print(TempCest);
lcd.print(" C");
Serial.print(pulsante);}
delay(5000) ;
}
Grazie!