Advertisement
chrisdaloa

Test Restyling

Oct 27th, 2017
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.07 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 lettura_ts = 0; //conterrà l'ultimo valore "millis" in cui è stata controllata la temperatura
  73. unsigned long lettura_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 soglia_umidita = 5; //variazione minima umidità per accendere led
  76.  
  77. // se true disattiva led e buzzer
  78. boolean spento_led = false;
  79. boolean spento_beep = false;
  80.  
  81. boolean statopulsante = false;
  82.  
  83. boolean serial = true;
  84.  
  85. unsigned long currentMillis = 0;
  86.  
  87. unsigned long pulsante_ts = 0;
  88. unsigned long pulsante_interval = 1000;
  89.  
  90.  
  91.  
  92. int noled = 9;
  93. int rosso = 1;
  94. int verde = 2;
  95. int blu = 3;
  96.  
  97.  
  98. char buff[50];
  99.  
  100.  
  101. void setup() {
  102.     // preimposto il contenuto del LCD
  103.     lcd.begin(16, 2);
  104.     lcd.print("Avvio");
  105.     lcd.setCursor(0,1);
  106.     lcd.print("in corso");
  107.  
  108.     //imposto il buzzer su output
  109.     pinMode(buzzer,OUTPUT);
  110.  
  111.     //imposto il led rbg su output
  112.     pinMode(RED,OUTPUT);
  113.     pinMode(GREEN,OUTPUT);
  114.     pinMode(BLUE,OUTPUT);
  115.  
  116.     //imposto il led rgb su spento
  117.     digitalWrite(RED,LOW);
  118.     digitalWrite(GREEN,LOW);
  119.     digitalWrite(BLUE,LOW);
  120.  
  121.    // pinMode(BUTTON, INPUT);
  122.     pinMode(interruptPin, INPUT_PULLUP);
  123.     attachInterrupt(digitalPinToInterrupt(interruptPin), spegni, RISING);
  124.  
  125.     Serial.begin(9600);  
  126.  
  127.     avvio();
  128.  
  129. }
  130.  
  131. void loop() {
  132.    
  133.     currentMillis = millis();
  134.  
  135.     //se ho premuto il pulsante attendo il tempo necessario a visualizzare il messaggio e rivalorizzo i millis di lettura  
  136.     if ((statopulsante) && (currentMillis - pulsante_ts > pulsante_interval)) {
  137.         statopulsante = false;
  138.         tempLCD();
  139.         lettura_ts = currentMillis;
  140.     }
  141.    
  142.    
  143.     //verifico se è il momento di aggiornare i dati sul display se non ho attivato il pulsante    
  144.     if ((currentMillis - lettura_ts >  lettura_interval ) && statopulsante == false)    {
  145.     lettura_ts = currentMillis;
  146.     if (serial) Serial.println("Nuova lettura");    
  147.  
  148.     //visualizzo i dati sul display
  149.     tempLCD();
  150.  
  151.     if (serial){
  152.       Serial.print("T ril: ");
  153.       Serial.println(t);
  154.       Serial.print("T pre: ");    
  155.       Serial.println(to);
  156.       Serial.print("H ril: ");
  157.       Serial.println(h);
  158.       Serial.print("H pre: ");
  159.       Serial.println(ho);
  160.     }
  161.    
  162.     if ((to != t) && (to != 0)) {  //se cambia la temperatura
  163.            
  164.         if (to < t){  //se la temperatura è aumentata accendo il led rgb verde
  165.             accendiLed(verde);
  166.             beep(verde);
  167.         }else{ //se la temperatura è scesa accendo il led rgb rosso
  168.             accendiLed(rosso);
  169.             beep(rosso);
  170.         }
  171.     }else{ //se non è cambiata la temperatura verifico la variazione dell'umidità
  172.         if ((ho > h+soglia_umidita-1 || ho < h-soglia_umidita-1) && (ho != 0)){ //se non è variata la temperatura ma è variata l'umidità di almeno 5 punti percentuali suono 2000 e accendo il led blu
  173.             accendiLed(blu);
  174.             beep(blu);
  175.         }
  176.       }
  177.     }
  178.  
  179. }
  180.  
  181. void spegni(){
  182.             statopulsante = true;      
  183.             pulsante_ts = millis();    
  184.             if (spento_led && spento_beep){                            
  185.                   spento_led = false;
  186.                   spento_beep = false;
  187.                   beep(4);
  188.                   lcd.clear();
  189.                   lcd.setCursor(0,0);
  190.                   lcd.print("Audio e Led     ");
  191.                   lcd.setCursor(0,1);
  192.                   lcd.print("Attivati        ");                  
  193.                   if (serial){
  194.                     Serial.println("Audio e Led Attivati");
  195.                     Serial.println(digitalRead(interruptPin));
  196.                   }
  197.                }else{
  198.                   accendiLed(noled);
  199.                   spento_led=true;
  200.                   spento_beep=true;
  201.                   lcd.clear();
  202.                   lcd.setCursor(0,0);
  203.                   lcd.print("Audio e Led     ");
  204.                   lcd.setCursor(0,1);
  205.                   lcd.print("Disattivati     ");                  
  206.                   if (serial){
  207.                     Serial.println("Audio e Led Disattivati");
  208.                     Serial.println(digitalRead(interruptPin));
  209.                   }
  210.             }
  211.  
  212.     if (serial){  
  213.       Serial.print("Pulsante: ");
  214.       Serial.println(digitalRead(interruptPin));      
  215.       Serial.print("Valore: ");
  216.       Serial.println(digitalRead(interruptPin)-1);    
  217.     }
  218. }
  219.  
  220. void tempLCD(){
  221.  
  222.     //memorizzo le letture precedenti
  223.     to = t;
  224.     ho = h;
  225.  
  226.     //leggo temperatura e umidità  
  227.     t = dht.readTemperature();
  228.     h = dht.readHumidity();
  229.    
  230.     //visualizzo i dati sul display
  231.     lcd.clear();
  232.     lcd.setCursor(0,0);
  233.     lcd.print("Temperatura ");
  234.     lcd.setCursor(0,1);
  235.     lcd.print("Umidita'    ");
  236.  
  237.     // scrivo temperatura e umidità sul display
  238.     lcd.setCursor(12, 0);
  239.     lcd.print(t);
  240.     lcd.setCursor(14, 0);
  241.     lcd.print(char(223));
  242.     lcd.setCursor(15, 0);
  243.     lcd.print("C");    
  244.     lcd.setCursor(12, 1);
  245.     lcd.print(h);
  246.     lcd.setCursor(14, 1);
  247.     lcd.print("%");
  248. }
  249.  
  250. void avvio(){
  251.     //Attendo i 2 secondi necessari a ricevere i dati dal DHT11
  252.     //nell'attesa accendo tutti i led e mostro un messaggio "Avvio in corso..."
  253.     //sempre che le variabili spento_led e spento_beep non siano attive
  254.    
  255.       if (serial){
  256.          sprintf(buff, "Spento led: %1, Spento beep: %2", spento_led, spento_beep);
  257.          Serial.println(buff);
  258.       }
  259.          
  260.       delay(500);
  261.  
  262.       //accendo rosso
  263.       lcd.setCursor(8,1);
  264.       lcd.print(".");
  265.       accendiLed(1);
  266.       beep(1);
  267.       delay(500);
  268.      
  269.  
  270.       //accendo verde
  271.       lcd.setCursor(9,1);
  272.       lcd.print(".");
  273.       accendiLed(2);
  274.       beep(2);
  275.       delay(500);
  276.  
  277.       //accendo blu
  278.       lcd.setCursor(10,1);
  279.       lcd.print(".");
  280.       accendiLed(3);
  281.       beep(3);
  282.       delay(500);      
  283.  
  284.       //visualizzo dati su LCD
  285.       tempLCD();
  286.  
  287.       //spengo il led
  288.       digitalWrite(RED,LOW);
  289.       digitalWrite(GREEN,LOW);
  290.       digitalWrite(BLUE,LOW);
  291. }
  292.  
  293. void accendiLed(int c){
  294.      if (spento_led) return;
  295.      if (serial) Serial.print(c);
  296.          switch (c){                    
  297.           case 1:
  298.             digitalWrite(RED,HIGH);
  299.             digitalWrite(GREEN,LOW);
  300.             digitalWrite(BLUE,LOW);
  301.             if (serial) Serial.print(c);
  302.             break;        
  303.           case 2:
  304.             digitalWrite(RED,LOW);
  305.             digitalWrite(GREEN,HIGH);
  306.             digitalWrite(BLUE,LOW);  
  307.             if (serial) Serial.print(c);
  308.             break;      
  309.           case 3:
  310.             digitalWrite(RED,LOW);
  311.             digitalWrite(GREEN,LOW);
  312.             digitalWrite(BLUE,HIGH);  
  313.             if (serial) Serial.print(c);
  314.             break;      
  315.           case 9:
  316.             digitalWrite(RED,LOW);
  317.             digitalWrite(GREEN,LOW);
  318.             digitalWrite(BLUE,LOW);
  319.             if (serial) Serial.print(c);
  320.             break;
  321.          }
  322.            
  323. }
  324.  
  325. void beep(int b){
  326.    if (spento_beep) return;
  327.     switch (b){
  328.       case 1:
  329.         tone(buzzer,1000,200);
  330.         break;
  331.       case 2:
  332.         tone(buzzer,2000,200);
  333.         break;
  334.       case 3:
  335.         tone(buzzer,3000,200);
  336.         break;
  337.       case 4:
  338.         tone(buzzer,4000,100);
  339.         break;
  340.     }
  341. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement