Advertisement
Ayush1325

Arduino Nano

Feb 1st, 2021
944
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <ArduinoJson.h>
  2.  
  3. #include <LiquidCrystal.h>
  4.  
  5. #include <Adafruit_Sensor.h>
  6. #include <DHT.h>
  7. #include <DHT_U.h>
  8.  
  9. #define PIR_PIN 4
  10. #define DHTPIN 1
  11. #define DHTTYPE DHT22
  12. DHT_Unified dht(DHTPIN, DHTTYPE);
  13.  
  14. LiquidCrystal lcd(8, 9, 7, 6, 5, 4);
  15.  
  16. enum msg {
  17.   SENSOR_INFO,
  18.   DOOR,
  19. };
  20.  
  21. void setup() {
  22.   pinMode(DHTPIN, INPUT);
  23.   pinMode(PIR_PIN, INPUT);
  24.  
  25.   dht.begin();
  26.   lcd.begin(16, 2);
  27.   Serial.begin(9600);
  28.  
  29.   attachInterrupt(digitalPinToInterrupt(PIR_PIN), openDoorISR, RISING);
  30.   attachInterrupt(digitalPinToInterrupt(PIR_PIN), closeDoorISR, FALLING);
  31. }
  32.  
  33. void loop() {
  34.   handleLcd();
  35.   delay(1000);
  36. }
  37.  
  38. void serialEvent()
  39. {
  40.   StaticJsonDocument<15> doc;
  41.   deserializeJson(doc, Serial);
  42.   int act = doc["action"];
  43.   if (act == SENSOR_INFO)
  44.   {
  45.     sendSensorInfo();
  46.   }
  47. }
  48.  
  49. void sendSensorInfo()
  50. {
  51.   StaticJsonDocument<40> doc;
  52.   doc["action"] = SENSOR_INFO;
  53.   doc["temp"] = getTemp();
  54.   doc["hmd"] = getHumidity();
  55.   serializeJson(doc, Serial);
  56.   Serial.println();
  57. }
  58.  
  59. void handleDoor(bool state) {
  60.   StaticJsonDocument<20> doc;
  61.   doc["action"] = DOOR;
  62.   doc["state"] = state;
  63.   serializeJson(doc, Serial);
  64.   Serial.println();
  65. }
  66.  
  67. void handleLcd() {
  68.   float temperature = getTemp();
  69.   int humidity = getHumidity();
  70.   printToLcd(temperature, humidity);
  71. }
  72.  
  73. float getTemp()
  74. {
  75.   sensors_event_t event;
  76.   dht.temperature().getEvent(&event);
  77.   if (isnan(event.temperature)) {
  78.     return 0;
  79.   }
  80.   else {
  81.     return event.temperature;
  82.   }
  83. }
  84.  
  85. int getHumidity()
  86. {
  87.   sensors_event_t event;
  88.   dht.humidity().getEvent(&event);
  89.   if (isnan(event.relative_humidity)) {
  90.     return 0;
  91.   }
  92.   else {
  93.     return event.relative_humidity;
  94.   }
  95. }
  96.  
  97. void printToLcd(float temp, int hmd) {
  98.   lcd.clear();
  99.   String tempData = "Temp: " + String(temp);
  100.   lcd.print(tempData);
  101.   lcd.setCursor(0, 1);
  102.   String tempHmd = "Humd: " + String(hmd) + "%";
  103.   lcd.print(tempHmd);
  104. }
  105.  
  106. void openDoorISR() {
  107.   handleDoor(true);
  108. }
  109.  
  110. void closeDoorISR() {
  111.   handleDoor(false);
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement