#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6ECP1E1nc"
#define BLYNK_TEMPLATE_NAME "Home automation"
#define BLYNK_AUTH_TOKEN "hkZFa5Z6E9SwmZUvlQuKy9O5w_-J5Gfc"
#define pinRed 12
#define pinYellow 27
#define pinGreen 25
#include <WiFi.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
#include <BlynkSimpleEsp32.h>
BlynkTimer timer;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Traffic light timing variables (in seconds)
int greenTime = 2;
int yellowTime = 2;
int redTime = 2;
int plusminus = 0;
// Function to update the traffic light status
void updateTrafficLight() {
// Green
digitalWrite(pinGreen, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Green: ");
for (int i = greenTime; i >= 0; i--) {
lcd.setCursor(7, 0);
lcd.print(i);
delay(1000);
lcd.clear(); // Clear the display before updating the next digit
lcd.setCursor(0, 0);
lcd.print("Green: ");
}
digitalWrite(pinGreen, LOW);
// Yellow
digitalWrite(pinYellow, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Yellow: ");
for (int i = yellowTime; i >= 0; i--) {
lcd.setCursor(8, 0);
lcd.print(i);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Yellow: ");
}
digitalWrite(pinYellow, LOW);
// Red
digitalWrite(pinRed, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Red: ");
for (int i = redTime; i >= 0; i--) {
lcd.setCursor(7, 0);
lcd.print(i);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Red: ");
}
digitalWrite(pinRed, LOW);
}
BLYNK_WRITE(V3){
plusminus = param.asInt();
}
BLYNK_WRITE(V0) {
if(plusminus == 1){
greenTime ++;
}
else {
greenTime --;
}
}
BLYNK_WRITE(V1) {
if(plusminus == 1){
yellowTime ++;
}
else {
yellowTime --;
}
}
BLYNK_WRITE(V2) {
if(plusminus == 1){
redTime ++;
}
else {
redTime --;
}
}
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
pinMode(pinRed, OUTPUT);
pinMode(pinYellow, OUTPUT);
pinMode(pinGreen, OUTPUT);
lcd.init( );
lcd.backlight();
}
void loop() {
Blynk.run();
Blynk.syncAll();
timer.run();
updateTrafficLight();
}