#include "DHT.h"
//#include <WiFi.h>
#include <PIR.h>
#include <ESP32Servo.h>
#define DHTTYPE DHT22
//SENSORS
#define DHTPin 1 //DHT22 PIN
DHT dht(DHTPin, DHTTYPE);
#define LDR_Pin 2 //LDR pin
#define PIR_Pin 3 // Motion Sensor pin
#define button 4 //button for servo/buzzer
#define button2 5 //button for controlling the lights
bool buttonstate=false; //for servo
bool lastbuttonstate= false;
bool buttonstate1=false; //for buzzer
bool lastbuttonstate1= false;
bool ledState = false; // Current LED state (off initially)
bool lastButtonStateLED = false; // Separate button state for LED control
bool buttonStateLED = false;
//ACTUATORS
#define LED_red 15 //Red LED pin
#define LED_green 14 // Green LED pin -reps lighting
#define servo 13 //Servo motor pin - slide switch to control it
Servo servo1;
int pos= 0; //current servo position 0-180 degrees
int lastPos = 0; // Track previous servo position
#define buzz 12 //buzzer sensor pin - slide switch for servo
void setup() {
Serial.begin(115200);
// SENSORS
dht.begin();
pinMode(PIR_Pin, INPUT);
pinMode(button, INPUT);
pinMode(button2, INPUT);
//ACTUATORS
pinMode(LED_red, OUTPUT); //Red LED
pinMode(LED_green, OUTPUT); //Green LED
pinMode(buzz, OUTPUT);
servo1.attach(servo); //Servo
servo1.write(pos);
}
void loop() {
//SENSORS
//SenseHumid();
//LDR();
//PIR();
// window();
//}
//lastbuttonstate=buttonstate;
lights();
}
//ACTUATORS
/*void SenseHumid(){
float Temp= dht.readTemperature();
float Humid= dht.readHumidity();
//Check if any readings failed
if(isnan(Temp) || isnan(Humid)){
Serial.println("Failed to read from DHT22 Sensor");
return;
}
Serial.print("Humidity: ");
Serial.print(Humid);
Serial.println("%");
Serial.print("Temperature: ");
Serial.println(Temp);
delay(1000); //1 second delay for printing on serial monitor
}
void LDR(){ //needs calibration
int Light= analogRead(LDR_Pin);
int Light1= map(Light, 8126,64, 0.1, 100000);
if(Light1<=50000){
Serial.println("Dark");
}
else if(Light1>=50001){
Serial.println("Bright");
}
delay (1000);
}
void PIR(){ //motion controlling LEDs
int motion= digitalRead(PIR_Pin);
if(motion==1){
digitalWrite(LED_red, HIGH);
Serial.println("Motion detected!");
motion=0;
}
else{
digitalWrite(LED_red,LOW);
Serial.println("No motion!");
}
}
*/
// Buzzer control functions
void beepOnce() {
tone(buzz, 3000, 500); // Beep at 3000Hz for 500ms
delay(500); // Short pause after beep
}
void beepTwice(){
tone(buzz, 3000, 300); // First beep
delay(500);
tone(buzz, 3000, 300); // Second beep
delay(1000); // Short pause after second beep
}
void window(){
buttonstate=digitalRead(button);
if(buttonstate==LOW && lastbuttonstate==HIGH){
if(pos==0){
pos=180;
beepOnce();
}
else{
pos=0;
beepTwice();
}
servo1.write(pos);
}
lastbuttonstate=buttonstate;
}
void lights() {
// Read button state for LED control
buttonStateLED = digitalRead(button2);
// Check for button press (LOW because of INPUT_PULLUP)
if(buttonStateLED == LOW && lastButtonStateLED == HIGH) {
// Toggle LED state
if(ledState==LOW){
ledState==HIGH;
digitalWrite(LED_green, ledState);
}
else{
ledState==LOW;
digitalWrite(LED_green, ledState);
}
}
lastButtonStateLED = buttonStateLED;
}