Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ArduinoJson.h>
- #include <LiquidCrystal.h>
- #include <Adafruit_Sensor.h>
- #include <DHT.h>
- #include <DHT_U.h>
- #define PIR_PIN 4
- #define DHTPIN 1
- #define DHTTYPE DHT22
- DHT_Unified dht(DHTPIN, DHTTYPE);
- LiquidCrystal lcd(8, 9, 7, 6, 5, 4);
- enum msg {
- SENSOR_INFO,
- DOOR,
- };
- void setup() {
- pinMode(DHTPIN, INPUT);
- pinMode(PIR_PIN, INPUT);
- dht.begin();
- lcd.begin(16, 2);
- Serial.begin(9600);
- attachInterrupt(digitalPinToInterrupt(PIR_PIN), openDoorISR, RISING);
- attachInterrupt(digitalPinToInterrupt(PIR_PIN), closeDoorISR, FALLING);
- }
- void loop() {
- handleLcd();
- delay(1000);
- }
- void serialEvent()
- {
- StaticJsonDocument<15> doc;
- deserializeJson(doc, Serial);
- int act = doc["action"];
- if (act == SENSOR_INFO)
- {
- sendSensorInfo();
- }
- }
- void sendSensorInfo()
- {
- StaticJsonDocument<40> doc;
- doc["action"] = SENSOR_INFO;
- doc["temp"] = getTemp();
- doc["hmd"] = getHumidity();
- serializeJson(doc, Serial);
- Serial.println();
- }
- void handleDoor(bool state) {
- StaticJsonDocument<20> doc;
- doc["action"] = DOOR;
- doc["state"] = state;
- serializeJson(doc, Serial);
- Serial.println();
- }
- void handleLcd() {
- float temperature = getTemp();
- int humidity = getHumidity();
- printToLcd(temperature, humidity);
- }
- float getTemp()
- {
- sensors_event_t event;
- dht.temperature().getEvent(&event);
- if (isnan(event.temperature)) {
- return 0;
- }
- else {
- return event.temperature;
- }
- }
- int getHumidity()
- {
- sensors_event_t event;
- dht.humidity().getEvent(&event);
- if (isnan(event.relative_humidity)) {
- return 0;
- }
- else {
- return event.relative_humidity;
- }
- }
- void printToLcd(float temp, int hmd) {
- lcd.clear();
- String tempData = "Temp: " + String(temp);
- lcd.print(tempData);
- lcd.setCursor(0, 1);
- String tempHmd = "Humd: " + String(hmd) + "%";
- lcd.print(tempHmd);
- }
- void openDoorISR() {
- handleDoor(true);
- }
- void closeDoorISR() {
- handleDoor(false);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement