Advertisement
Guest User

Untitled

a guest
May 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Ciao, ho fatto qualche modifica al tuo codice;
  3.  *
  4.  *  - il codice è "diviso in 2", la prima parte riguarda il gas, al seconda la temperatura. Vedi tu se modificare la seconda parte
  5.  *    sulla falsa riga della prima.
  6.  *  - ho tolto il delay in fondo e l'ho sostituito con dei timer, in questo modo Arduino non rimane fermo anon fare nulla per 2 secondi
  7.  *    ma continua a ciclare. Quando i timer scadono vengono eseguite le operazioni.
  8.  *  - ho aggiunto alcune variabili tra cui la tolleranza (tollGas) per evitare che ad ogni minima variazione (anche solo di 1)
  9.  *    venisse inviato il dato all'app.
  10.  *  - Verifica il pin del sensore DHT, ho messo il 9 perchè è il primo pin che mi è venuto in mente.
  11.  */
  12. #include <SoftwareSerial.h>
  13. #include <neotimer.h>
  14. #include "DHT.h"
  15.  
  16. //definisco pin RX e TX da Arduino verso modulo BT
  17. #define BT_TX_PIN 12
  18. #define BT_RX_PIN 11
  19. //definisco il pin del sensore MQ5
  20. #define PIN_SENSORE A0
  21. #define PIN_LED 8
  22. #define PIN_TERMO 9 // <------------------ da definire!!!
  23. #define DHTTYPE DHT11
  24.  
  25. SoftwareSerial bt =  SoftwareSerial(BT_RX_PIN, BT_TX_PIN);
  26. Neotimer timerGas(2000); // in millisecondi -> 2 secondi
  27. Neotimer timerTermo(2000); // in millisecondi -> 2 secondi
  28. DHT Termometro(PIN_TERMO, DHTTYPE); // Definizione termometro
  29.  
  30. int datoGas;
  31. int datoGasPrec;
  32. int tollGas;
  33. int limiteGas;
  34. float Temperatura;
  35.  
  36. void setup() {
  37.  
  38. //  pinMode(PIN_SENSORE, INPUT); // non è necessario definire come output un pin analogico
  39.  
  40.   //definisco modalità pin
  41.   pinMode(BT_RX_PIN, INPUT);
  42.   pinMode(BT_TX_PIN, OUTPUT);
  43.   pinMode(PIN_LED, OUTPUT);
  44.   bt.begin(9600); //inizializzo comunicazione Bluetooth
  45.   Termometro.begin();
  46.   timerGas.start();
  47.   timerTermo.start();
  48.   datoGasPrec = -1;
  49.   tollGas = 10;
  50.   limiteGas = 100;
  51. }
  52.  
  53. void loop()
  54. {
  55.   // ================== GESTIONE GAS ==================
  56.   if(timerGas.done()) // quando il timer del gas è scaduto leggo il dato dal sensore
  57.   {
  58.     datoGas = analogRead(PIN_SENSORE);
  59.     if ((datoGas >= (datoGasPrec+tollGas)) || (datoGas <= (datoGasPrec+tollGas))) //se diverso dall'ultima lettura(+ o - la tolleranza) lo invio al Bluetooth
  60.     {
  61.        if (datoGas >= limiteGas) // se maggiore o uguale del limite attivo la segnalazione
  62.        {
  63.           bt.print("ATTENZIONE GAS RILEVATO   ");
  64.           bt.println(datoGas);
  65.           digitalWrite(PIN_LED, HIGH);
  66.         }
  67.         else // altrimenti comunico solo il valore
  68.         {
  69.           bt.print("AMBIENTE SICURO   ");
  70.           bt.println(datoGas);
  71.           digitalWrite(PIN_LED, LOW);
  72.         }
  73.       datoGasPrec = datoGas; // memorizzo il valore precedente
  74.       timerGas.start(); // riattivo il timer del gas
  75.     }
  76.   }
  77.  
  78.   // ================== GESTIONE TEMPERATURA ==================
  79.   if(timerTermo.done()) // quando il timer della temperatura è scaduto
  80.   {
  81.     Temperatura = Termometro.readTemperature(); // leggo la temperatura
  82.     if(isnan(Temperatura)) // se rivevo il valore "isnan" (sensore non comunica o è rotto)
  83.     {
  84.       bt.print("Sensore temperatura KO"); // segnalo la rottura del sensore
  85.     }
  86.     else
  87.     {
  88.       bt.print("Temperatura: "); // altrimenti invio la temperatura
  89.       bt.println(Temperatura);
  90.     }
  91.     timerTermo.start(); // avvio nuovamente il timer
  92.   }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement