/*
https://wokwi.com/projects/365379406933156865
*/
#include "DHTesp.h"
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
const int DHT_PIN = 15;
const int PIR = 13;
const int svOne = 2;
const int svTwo = 4;
const int svThree = 5;
const int svFour = 18;
int pos = 0; // test for servo
int pirState;
int display = 2;
DHTesp dhtSensor;
Servo servOne;
Servo servTwo;
Servo servThree;
Servo servFour;
bool pressButton = false;
bool pressButtonA = false;
bool pressButtonB = false;
bool pressButtonC = false;
const float GAMMA = 0.7;
const float RL10 = 50;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(PIR, INPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
servOne.attach(svOne);
servTwo.attach(svTwo);
servThree.attach(svThree);
servFour.attach(svFour);
lcd.init();
lcd.backlight();
servOne.write(0);
servTwo.write(0);
servThree.write(0);
servFour.write(0);
}
// red 25; 26; 27; 14;
void loop() {
servOne.write(0);
servTwo.write(0);
servThree.write(0);
servFour.write(0);
delay(50);
bool stateButton = digitalRead(25);
pirState = digitalRead(PIR);
int analogValue = analogRead(12);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
lcd.setCursor(0,0); // first column and row
if ((lux > 50) && (display == 2)){
lcd.clear();
lcd.print("Tomorrow");
display = 1;
}
if ((lux <= 50) && (display == 1)){
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Yesterday");
display = 2;
}
if (pirState == HIGH ) {
Serial.println("Motion detected");
} else {
Serial.println("No motion detected");
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(50);
if (stateButton == HIGH && !pressButton){
servOne.write(90);
delay(500);
pressButton = true;
}
if (stateButton == LOW) {
pressButton = false;
}
if (digitalRead(26) == HIGH && !pressButtonA){
servTwo.write(180);
delay(500);
pressButtonA = true;
}
if (digitalRead(26) == LOW){
pressButtonA = false;
}
if (digitalRead(27) == HIGH && !pressButtonB){
servThree.write(180);
delay(500);
pressButtonB = true;
}
if (digitalRead(27) == LOW){
pressButtonB = false;
}
if (digitalRead(14) == HIGH && !pressButtonC){
servFour.write(180);
delay(500);
pressButtonC = true;
}
if (digitalRead(14) == LOW){
pressButtonC = false;
}
}