#include <Wire.h> //library I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//defines pins number
const int trigPin = 13;
const int echoPin = 14;
const int rPin = 27;
const int bPin = 25;
const int gPin = 26;
const int pirPin = 4;
const int buttonPin = 16;
const int relayPin = 5;
int isRats = 0;
int buttonState = 0;
int pirState = 0;
int counter = 0;
int pir;
int currentState;
int previousState;
//unsigned long duration;
//int SDA = 21,SCL = 22;
long duration;
int distance;
bool relayState = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//Serial.println("Hello, ESP32!");
pinMode(buttonPin, INPUT_PULLUP);
pinMode(pirPin, INPUT);
pinMode(rPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(relayPin, OUTPUT);
Wire.begin(SDA, SCL);
lcd.begin(SDA, SCL);
}
void loop() {
isRats = digitalRead(pirPin);
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH){
digitalWrite(pir, HIGH);
currentState = 1;
}else {
digitalWrite(pir, LOW);
currentState = 0;
}
if (currentState != currentState){
if (currentState == 1){
counter = counter + 1;
Serial.println(counter);
}
}
if (counter == 0){
digitalWrite(relayPin, LOW);
digitalWrite(pirPin, HIGH);
}
if (counter == 1){
digitalWrite(relayPin, HIGH);
digitalWrite(pirPin, LOW);
}
if (counter == 2){
counter = 0;
}
previousState = currentState;
delay (100);
// this is can be use from open ai
// if (buttonState == LOW){
// relayState = !relayState;
// digitalWrite(relayPin, relayState);
// pirState = !pirState;
// digitalWrite(pirPin, pirState);
// if(relayState == 1 && pirState == 1) {
// lcd.clear();
// lcd.setCursor(0,0);
// lcd.print("PIR OFF");
// } else {
// lcd.clear();
// lcd.setCursor(0,0);
// lcd.print("PIR ON");
// }
// delay(200);
// }
// if (buttonState == LOW){
// relayState = !relayState;
// relayState = 0;
// digitalWrite(relayPin, relayState);
// pirState = 0;
// digitalWrite(pirPin, pirState);
// lcd.clear();
// lcd.setCursor(0,0);
// lcd.print("PIR OFF");
// delay(200);
// }else {
// relayState = 1;
// digitalWrite(relayPin, relayState);
// pirState = 1;
// digitalWrite(pirPin, pirState);
// lcd.setCursor(0,0);
// lcd.print("Thanks");
// delay(500);
// Serial.println("Thanks");
// lcd.clear();
// }
// isRats = digitalRead(pirPin);
// Serial.println(isRats);
if (isRats == 1) {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
if (isRats == 1 && distance < 200 ){
digitalWrite(rPin, HIGH);
delay(1000);
digitalWrite(gPin, LOW);
delay(1000);
digitalWrite(bPin, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Motion Detected");
lcd.setCursor(0,1);
lcd.print("Mice !");
Serial.println("Mice!");
delay(200);
// lcd.clear();
}
else if (isRats == 1 && distance < 350 ){
digitalWrite(rPin, LOW);
delay(1000);
digitalWrite(bPin, HIGH);
delay(1000);
digitalWrite(gPin, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("There Are");
lcd.setCursor(0,1);
lcd.print("Something!");
Serial.println("There Are Something");
delay(200);
lcd.clear();
}
else {
digitalWrite(gPin, HIGH);
delay(1000);
digitalWrite(rPin, LOW);
delay(1000);
digitalWrite(bPin, LOW);
lcd.setCursor(0,0);
lcd.print("You're ");
lcd.setCursor(0,1);
lcd.print("Plant Save");
Serial.println("You're Plant Save");
delay(200);
// lcd.clear();
}
}
}
// //read the state of the pushbutton value:
// buttonState = digitalRead(buttonPin);
// // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
// if (buttonState == 1 && pirState == 0){
// pushed = 1-pushed;
// delay (100);
// }
// // turn LED on:
// digitalWrite(isRats, HIGH);
// // sei the cursor to column 0, line 0
// lcd.setCursor(0, 0);
// lcd.print("WELCOME SIR");
// delay(100);
// // lcd.clear();
// } else {
// // turn LED off
// digitalWrite(isRats, LOW);
// // sei the cursor to column 0, line 0
// lcd.setCursor(0, 0);
// lcd.print("THANK YOU SIR");
// // set the cursor to column 0, line 1
// lcd.setCursor(0, 1);
// lcd.print(" ");
// delay(100);
// }
// } else if (buttonState == 1) {
// // before turn LED off:
// digitalWrite(rPin, HIGH);
// delay(5000);
// digitalWrite(gPin, LOW);
// digitalWrite(bPin, LOW);
// digitalWrite(pirPin, LOW);
// } else {
// // turn LED off:
// digitalWrite(rPin, LOW);
// digitalWrite(bPin, LOW);
// digitalWrite(gPin, LOW);
// lcd.clear();
// }