/* * ARDUINO TEST N.1 * Descrizione funzionamento: * Rilevatore di temperatura e umidità su display 1602 con le seguenti caratteristiche: * - beep frequenza 1000 al cambio di temperatura * - beep frequenza 2000 al cambio di umidità di almeno 3 punti percentuali * - accensione led ROSSO se la temperatura scende * - accensione led VERDE se la temperatura sale * - accensione led BLU se l'umidità cambia di almeno 3 punti percentuali * - pulsane di spegnimento led * - potenziometro regolatore display * The circuit: * LCD RS pin to digital pin 7 * LCD Enable pin to digital pin 8 * LCD D4 pin to digital pin 9 * LCD D5 pin to digital pin 10 * LCD D6 pin to digital pin 11 * LCD D7 pin to digital pin 12 * LCD R/W pin to ground * LCD VSS pin to ground * LCD VCC pin to 5V * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) * * BUTTON to digital pin 2 * * DHT to digital pin 13 * * BUZZER to digital pin 4 */ // include the library code: #include #include //definisco il DHT11 #define DHTPIN 13 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // initialize the library with the numbers of the interface pins LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //definisco i pin del led RGB #define BLUE 3 #define GREEN 5 #define RED 6 // definisco il pin del buzzer int buzzer = 4; //definisco le variabili di temperature e umidità int t = dht.readTemperature(); int h = dht.readHumidity(); //definisco le variabili che uso per memorizzare i valori precedenti int to = t; int ho = h; //definisco l'interrupt alla pressione del pulsante sul pin 2 const byte interruptPin = 2; int val = 0; void setup() { // preimposto il contenuto del LCD lcd.begin(16, 2); lcd.print("Avvio"); lcd.setCursor(0,1); lcd.print("in corso"); //imposto il buzzer su output pinMode(buzzer,OUTPUT); //imposto il led rbg su output pinMode(RED,OUTPUT); pinMode(GREEN,OUTPUT); pinMode(BLUE,OUTPUT); //imposto il led rgb su spento digitalWrite(RED,255); digitalWrite(GREEN,255); digitalWrite(BLUE,LOW); // pinMode(BUTTON, INPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), spegni, CHANGE); Serial.begin(9600); } void loop() { //la prima volta attendo 2 secondi altrimenti non valorizza le variabili del DHT11 //nell'attesa accendo tutti i led e mostro un messaggio "Avvio in corso..." (vedi setup) if (to == 0){ delay(500); //accendo rosso lcd.setCursor(8,1); lcd.print("."); digitalWrite(RED,HIGH); digitalWrite(GREEN,LOW); digitalWrite(BLUE,LOW); delay(500); //accendo verde lcd.setCursor(9,1); lcd.print("."); digitalWrite(RED,LOW); digitalWrite(GREEN,HIGH); digitalWrite(BLUE,LOW); delay(500); //accendo blu lcd.setCursor(10,1); lcd.print("."); digitalWrite(RED,LOW); digitalWrite(GREEN,LOW); digitalWrite(BLUE,HIGH); delay(500); //visualizzo i dati sul display lcd.setCursor(0,0); lcd.print("Temperatura "); lcd.setCursor(0,1); lcd.print("Umidita' "); //spengo il led spegni(); } //leggo temperatura e umidità t = dht.readTemperature(); h = dht.readHumidity(); // scrivo temperatura e umidità sul display lcd.setCursor(13, 0); lcd.print(t); lcd.setCursor(15, 0); lcd.print(char(223)); lcd.setCursor(13, 1); lcd.print(h); lcd.setCursor(15, 1); lcd.print("%"); if (to > 0){ if (to != t) { //se cambia la temperatura buz di 1000 // tone(buzzer,1000,200); if (to <= t){ //se la temperatura è aumentata o è rimasta invariata accendo il led rgb verde digitalWrite(RED,LOW); digitalWrite(GREEN,HIGH); digitalWrite(BLUE,LOW); }else{ //se la temperatura è scesa accendo il led rgb rosso digitalWrite(RED,HIGH); digitalWrite(GREEN,LOW); digitalWrite(BLUE,LOW); } }else{ if (ho > h+2 || ho < h-2){ //se non è variata la temperatura ma è variata l'umidità di almeno 5 punti percentuali suono 2000 e accendo il led blu // tone(buzzer,2000,200); digitalWrite(RED,HIGH); digitalWrite(GREEN,HIGH); digitalWrite(BLUE,LOW); } } } //salvo i valori precedenti to = t; ho = h; //attendo 5 secondi delay(5000); } void spegni(){ digitalWrite(RED,LOW); digitalWrite(GREEN,LOW); digitalWrite(BLUE,LOW); }