#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <ThingSpeak.h>
const int ldrPin = A14; //the number of the LDR pin
const int pirAPin = 13;
const int pirBPin = 10;
const int pirCPin = 8;
const int streetLampAPin = 12;
const int streetLampBPin = 9;
const int streetLampCPin = 7;
const int mainSwitchPin = 2;
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2574932 ;
const char* myApiKey = "7SH0QD85UOAFUXT7";
const char* server = "api.thingspeak.com";
bool lampAStatus = 0;
bool lampBStatus = 0;
bool lampCStatus = 0;
LiquidCrystal_I2C lcd(0x27,20,4);
WiFiClient client;
void setup()
{
Serial.begin(9600);
pinMode(ldrPin, INPUT); //initialize the LDR pin as an input
pinMode(streetLampAPin, OUTPUT);
pinMode(streetLampBPin, OUTPUT);
pinMode(streetLampCPin, OUTPUT);
pinMode(pirAPin, INPUT);
pinMode(pirBPin, INPUT);
pinMode(pirCPin, INPUT);
lcd.init();
lcd.clear();
lcd.backlight();
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); //DEFAULT KEYWORDS
while (WiFi.status() != WL_CONNECTED) // dEFAUKT KEYWORD
{
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));
//WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop()
{
int devicePowerStatus= digitalRead(mainSwitchPin);
if(devicePowerStatus == HIGH)
{
int ldrStatus = analogRead(ldrPin); //read the status of the LDR value //check if the LDR status is <= 300
lcd.clear();
if (ldrStatus <=300 )
{
Serial.println("DARK OUTSIDE");
lcd.setCursor(0,0);
lcd.print("DARK OUTSIDE");
int pirAStatus = digitalRead(pirAPin);
int pirBStatus = digitalRead(pirBPin);
int pirCStatus = digitalRead(pirCPin);
if(pirAStatus == HIGH)
{
Serial.println("Motion Detected, Street Lamp A Turned ON");
lcd.setCursor(0, 1);
lcd.print("Street Lamp A: ON");
lampAStatus = 1;
digitalWrite(streetLampAPin, HIGH);
}
else
{
lcd.setCursor(0, 1);
lcd.print("Street Lamp A: OFF");
lampAStatus = 0;
digitalWrite(streetLampAPin, LOW);
}
if(pirBStatus == HIGH)
{
Serial.println("Motion Detected, Street Lamp B Turned ON");
lcd.setCursor(0, 2);
lcd.print("Street Lamp B: ON");
lampBStatus = 1;
digitalWrite(streetLampBPin, HIGH);
}
else
{
lcd.setCursor(0, 2);
lcd.print("Street Lamp B: OFF");
lampBStatus = 0;
digitalWrite(streetLampBPin, LOW);
}
if(pirCStatus == HIGH)
{
Serial.println("Motion Detected, Street Lamp C Turned ON");
lcd.setCursor(0, 3);
lcd.print("Street Lamp C: ON");
lampCStatus = 1;
digitalWrite(streetLampCPin, HIGH);
}
else
{
lcd.setCursor(0, 3);
lcd.print("Street Lamp C: OFF");
lampCStatus = 0;
digitalWrite(streetLampCPin, LOW);
}
delay(500);
}
else
{
Serial.println("Outside Bright, All Street Lamp Off");
lcd.setCursor(0, 0);
lcd.print("BRIGHTNESS OUTSIDE");
lcd.setCursor(0, 1);
lcd.print("Street Lamp A: OFF");
lcd.setCursor(0, 2);
lcd.print("Street Lamp B: OFF");
lcd.setCursor(0, 3);
lcd.print("Street Lamp C: OFF");
lampAStatus = lampBStatus = lampCStatus = 0;
digitalWrite(streetLampAPin, LOW);
digitalWrite(streetLampBPin, LOW);
digitalWrite(streetLampCPin, LOW);
delay(1000);
}
ThingSpeak.setField(1,lampAStatus);
ThingSpeak.setField(2,lampBStatus);
ThingSpeak.setField(3,lampCStatus);
int x = ThingSpeak.writeFields(myChannelNumber,myApiKey);
if(x == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(x));
}
Serial.println("---");
delay(15000);
}
else
{
Serial.println("Street Lamp Monitoring Device Off");
lcd.clear();
delay(1000);
}
}