Advertisement
chrisdaloa

Test2

Oct 26th, 2017
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.38 KB | None | 0 0
  1.  
  2.  
  3. /*
  4.  * ARDUINO TEST N.1
  5.  * Descrizione funzionamento:
  6.  * Rilevatore di temperatura e umidità su display 1602 con le seguenti caratteristiche:
  7.  * - beep frequenza 1000 al cambio di temperatura
  8.  * - beep frequenza 2000 al cambio di umidità di almeno 3 punti percentuali
  9.  * - accensione led ROSSO se la temperatura scende
  10.  * - accensione led VERDE se la temperatura sale
  11.  * - accensione led BLU se l'umidità cambia di almeno 3 punti percentuali
  12.  * - pulsane di spegnimento led
  13.  * - potenziometro regolatore display
  14.  *
  15.   The circuit:
  16.  * LCD RS pin to digital pin 7
  17.  * LCD Enable pin to digital pin 8
  18.  * LCD D4 pin to digital pin 9
  19.  * LCD D5 pin to digital pin 10
  20.  * LCD D6 pin to digital pin 11
  21.  * LCD D7 pin to digital pin 12
  22.  * LCD R/W pin to ground
  23.  * LCD VSS pin to ground
  24.  * LCD VCC pin to 5V
  25.  * 10K resistor:
  26.  * ends to +5V and ground
  27.  * wiper to LCD VO pin (pin 3)
  28.  *
  29.  * BUTTON to digital pin 2
  30.  *
  31.  * DHT to digital pin 13
  32.  *
  33.  * BUZZER to digital pin 4
  34.  
  35.  
  36.  */
  37.  
  38. // include the library code:
  39. #include <LiquidCrystal.h>
  40. #include <DHT.h>
  41.  
  42.  
  43. //definisco il DHT11
  44. #define DHTPIN 13
  45. #define DHTTYPE DHT11
  46. DHT dht(DHTPIN, DHTTYPE);
  47.  
  48. // initialize the library with the numbers of the interface pins
  49. LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
  50.  
  51. //definisco i pin del led RGB
  52. #define BLUE 3
  53. #define GREEN 5
  54. #define RED 6
  55.  
  56. // definisco il pin del buzzer
  57. int buzzer = 4;
  58.  
  59. //definisco le variabili di temperature e umidità
  60. int t = dht.readTemperature();
  61. int h = dht.readHumidity();
  62.  
  63. //definisco le variabili che uso per memorizzare i valori precedenti
  64. int to = t;
  65. int ho = h;
  66.  
  67. //definisco l'interrupt alla pressione del pulsante sul pin 2
  68. const byte interruptPin = 2;
  69.  
  70. int  val = 0;
  71.  
  72. unsigned long previousMillis = 0; //conterrà l'ultimo valore "millis" in cui è stata controllata la temperatura
  73. unsigned long interval = 5000; //intervallo di check e controllo temperatura
  74. unsigned long ultimapressione = 0; //conterrà l'ultimo valore "millis" in cui è stata controllata la temperatura
  75. int sogliaH = 5; //variazione minima umidità per accendere led
  76.  
  77. // se true disattiva led e buzzer
  78. boolean spento = true;
  79.  
  80. void setup() {
  81.     // preimposto il contenuto del LCD
  82.     lcd.begin(16, 2);
  83.     lcd.print("Avvio");
  84.     lcd.setCursor(0,1);
  85.     lcd.print("in corso");
  86.  
  87.     //imposto il buzzer su output
  88.     pinMode(buzzer,OUTPUT);
  89.  
  90.     //imposto il led rbg su output
  91.     pinMode(RED,OUTPUT);
  92.     pinMode(GREEN,OUTPUT);
  93.     pinMode(BLUE,OUTPUT);
  94.  
  95.     //imposto il led rgb su spento
  96.     digitalWrite(RED,LOW);
  97.     digitalWrite(GREEN,LOW);
  98.     digitalWrite(BLUE,LOW);
  99.  
  100.    // pinMode(BUTTON, INPUT);
  101.     pinMode(interruptPin, INPUT_PULLUP);
  102.     attachInterrupt(digitalPinToInterrupt(interruptPin), spegni, CHANGE);
  103.  
  104.     Serial.begin(9600);  
  105.  
  106. }
  107.  
  108. void loop() {
  109.  
  110.    if (to == 0){ //all'accesione eseguo la procedura di Avvio
  111.       avvio();
  112.    }
  113.  
  114.    // controllo quanto è passato dall'ultima lettura, se ho superato l'intervallo indicato allora rieseguo la lettura
  115.    unsigned long currentMillis = millis();
  116.    
  117.    if (((currentMillis - previousMillis > interval) ) or ( to == 0))  {
  118.     previousMillis = currentMillis;
  119.     Serial.println("Trascorsi 5 secondi");
  120.     //leggo temperatura e umidità  
  121.     t = dht.readTemperature();
  122.     h = dht.readHumidity();
  123.    
  124.     tempLCD();
  125.  
  126.     Serial.print("T ril: ");
  127.     Serial.println(t);
  128.     Serial.println("T pre: ");    
  129.     Serial.println(to);
  130.     Serial.println("H ril: ");
  131.     Serial.println(h);
  132.     Serial.println("H pre: ");
  133.     Serial.println(ho);
  134.  
  135.     if ((to > 0) && ((!spento))){
  136.     if (to != t) {  //se cambia la temperatura buz di 1000
  137.            
  138.         if (to < t){  //se la temperatura è aumentata accendo il led rgb verde
  139.             onVerde();
  140.         }else{ //se la temperatura è scesa accendo il led rgb rosso
  141.             onRosso();
  142.         }
  143.     }else{
  144.         if (ho > h+sogliaH-1 || ho < h-sogliaH-1){ //se non è variata la temperatura ma è variata l'umidità di almeno 5 punti percentuali suono 2000 e accendo il led blu
  145.             onBlu();
  146.         }
  147.       }
  148.     }
  149.  
  150.     //salvo i valori precedenti
  151.     to = t;
  152.     ho = h;
  153.  
  154.     }
  155.  
  156. }
  157.  
  158. void spegni(){
  159.   //if ((1 - digitalRead(interruptPin)) == 0  && (to > 0)){          
  160.   if ((1 - digitalRead(interruptPin)) == 0 ){          
  161.             if (spento){          
  162.                   spento = false;
  163.                   lcd.clear();
  164.                   lcd.setCursor(0,0);
  165.                   lcd.print("Audio e Led     ");
  166.                   lcd.setCursor(0,1);
  167.                   lcd.print("Attivati        ");
  168.                   delay(1000);
  169.                  // tempLCD();
  170.                   Serial.println("Audio e Led Attivati");
  171.                }else{
  172.                   spento=true;
  173.                   lcd.clear();
  174.                   lcd.setCursor(0,0);
  175.                   lcd.print("Audio e Led     ");
  176.                   lcd.setCursor(0,1);
  177.                   lcd.print("Disattivati     ");
  178.                   delay(1000);
  179.                  // tempLCD();
  180.                   Serial.println("Audio e Led Disattivati");
  181.             }
  182.  
  183.       Serial.print("Pulsante: ");
  184.       Serial.println(spento);
  185.  
  186.       //spengo i led in ogni caso
  187.       digitalWrite(RED,LOW);
  188.       digitalWrite(GREEN,LOW);
  189.       digitalWrite(BLUE,LOW);  
  190.   }          
  191. }
  192.  
  193. void tempLCD(){
  194.     //visualizzo i dati sul display
  195.       lcd.clear();
  196.       lcd.setCursor(0,0);
  197.       lcd.print("Temperatura ");
  198.       lcd.setCursor(0,1);
  199.       lcd.print("Umidita'    ");
  200.  
  201.     // scrivo temperatura e umidità sul display
  202.     lcd.setCursor(12, 0);
  203.     lcd.print(t);
  204.     lcd.setCursor(14, 0);
  205.     lcd.print(char(223));
  206.     lcd.setCursor(15, 0);
  207.     lcd.print("C");
  208.  
  209.     lcd.setCursor(12, 1);
  210.     lcd.print(h);
  211.     lcd.setCursor(14, 1);
  212.     lcd.print("%");
  213. }
  214.  
  215. void avvio(){
  216.     //Attendo 2 secondi altrimenti non valorizza le variabili del DHT11
  217.     //nell'attesa accendo tutti i led e mostro un messaggio "Avvio in corso..." (vedi setup)
  218.     //se in avvio la variabile spento è true, accendo i led ma non emetto suoni
  219.       Serial.println(spento);
  220.       delay(500);
  221.  
  222.       //accendo rosso
  223.       lcd.setCursor(8,1);
  224.       lcd.print(".");
  225.       digitalWrite(RED,HIGH);
  226.       digitalWrite(GREEN,LOW);
  227.       digitalWrite(BLUE,LOW);
  228.       if (!spento) tone(buzzer,1000,200);
  229.       delay(500);
  230.  
  231.       //accendo verde
  232.       lcd.setCursor(9,1);
  233.       lcd.print(".");
  234.       digitalWrite(RED,LOW);
  235.       digitalWrite(GREEN,HIGH);
  236.       digitalWrite(BLUE,LOW);
  237.       if (!spento) tone(buzzer,2000,200);
  238.       delay(500);
  239.  
  240.       //accendo blu
  241.       lcd.setCursor(10,1);
  242.       lcd.print(".");
  243.       digitalWrite(RED,LOW);
  244.       digitalWrite(GREEN,LOW);
  245.       digitalWrite(BLUE,HIGH);
  246.       if (!spento) tone(buzzer,3000,200);
  247.       delay(500);
  248.      
  249.      
  250.  
  251.       //spengo il led
  252.       spegni();
  253.       //delay(3000);
  254. }
  255.  
  256. void onVerde(){
  257.             digitalWrite(RED,LOW);
  258.             digitalWrite(GREEN,HIGH);
  259.             digitalWrite(BLUE,LOW);
  260.             tone(buzzer,1000,200);
  261. }
  262.  
  263. void onRosso(){
  264.             digitalWrite(RED,HIGH);
  265.             digitalWrite(GREEN,LOW);
  266.             digitalWrite(BLUE,LOW);
  267.             tone(buzzer,2000,200);            
  268. }
  269.  
  270. void onBlu(){        
  271.             digitalWrite(RED,LOW);
  272.             digitalWrite(GREEN,LOW);
  273.             digitalWrite(BLUE,HIGH);
  274.             tone(buzzer,3000,200);
  275. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement