#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL4LA_26FaW"
#define BLYNK_TEMPLATE_NAME "Traffic Light Controller 2"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "hYk6ZGwkNx5T-ewhGy8lglNebOWRcDv9";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define red_button_pin 12
#define orange_button_pin 14
#define green_button_pin 27
#define auto_mode_button_pin 23
#define red_button_vpin V12
#define orange_button_vpin V14
#define green_button_vpin V27
#define auto_mode_button_vpin V23
#define red_led_pin 2
#define orange_led_pin 4
#define green_led_pin 5
#define auto_mode_led_pin 23
int red_led_state = 0;
int orange_led_state = 0;
int green_led_state = 0;
int auto_mode_led_state = 0;
bool automatic_mode = false;
int current_led = 0;
int autoTimerId;
BLYNK_CONNECTED() {
Blynk.syncVirtual(red_button_vpin);
Blynk.syncVirtual(orange_button_vpin);
Blynk.syncVirtual(green_button_vpin);
Blynk.syncVirtual(auto_mode_button_vpin);
}
BLYNK_WRITE(red_button_vpin) {
red_led_state = param.asInt();
digitalWrite(red_led_pin, !red_led_state);
}
BLYNK_WRITE(orange_button_vpin) {
orange_led_state = param.asInt();
digitalWrite(orange_led_pin, !orange_led_state);
}
BLYNK_WRITE(green_button_vpin) {
green_led_state = param.asInt();
digitalWrite(green_led_pin, !green_led_state);
}
BLYNK_WRITE(auto_mode_button_vpin) {
auto_mode_led_state = param.asInt();
digitalWrite(auto_mode_led_pin, !auto_mode_led_state);
automatic_mode = auto_mode_led_state;
if (automatic_mode) {
autoTimerId = timer.setInterval(2000L, automatic_traffic_light);
} else {
timer.deleteTimer(autoTimerId);
}
}
void setup() {
Serial.begin(115200);
pinMode(red_button_pin, INPUT_PULLUP);
pinMode(orange_button_pin, INPUT_PULLUP);
pinMode(green_button_pin, INPUT_PULLUP);
pinMode(auto_mode_button_pin, INPUT_PULLUP);
pinMode(red_led_pin, OUTPUT);
pinMode(orange_led_pin, OUTPUT);
pinMode(green_led_pin, OUTPUT);
pinMode(auto_mode_led_pin, OUTPUT);
digitalWrite(red_led_pin, HIGH);
digitalWrite(orange_led_pin, HIGH);
digitalWrite(green_led_pin, HIGH);
digitalWrite(auto_mode_led_pin, HIGH);
Blynk.begin(auth, ssid, pass);
timer.setInterval(100L, listen_push_buttons);
}
void loop() {
Blynk.run();
timer.run();
}
void listen_push_buttons() {
if (digitalRead(red_button_pin) == LOW) {
delay(200);
control_led(1);
Blynk.virtualWrite(red_button_vpin, red_led_state);
}
if (digitalRead(orange_button_pin) == LOW) {
delay(200);
control_led(2);
Blynk.virtualWrite(orange_button_vpin, orange_led_state);
}
if (digitalRead(green_button_pin) == LOW) {
delay(200);
control_led(3);
Blynk.virtualWrite(green_button_vpin, green_led_state);
}
if (digitalRead(auto_mode_button_pin) == LOW) {
delay(200);
control_led(4);
Blynk.virtualWrite(auto_mode_button_vpin, auto_mode_led_state);
}
}
void control_led(int led) {
if (led == 1) {
red_led_state = !red_led_state;
digitalWrite(red_led_pin, !red_led_state);
} else if (led == 2) {
orange_led_state = !orange_led_state;
digitalWrite(orange_led_pin, !orange_led_state);
} else if (led == 3) {
green_led_state = !green_led_state;
digitalWrite(green_led_pin, !green_led_state);
} else if (led == 4) {
auto_mode_led_state = !auto_mode_led_state;
digitalWrite(auto_mode_led_pin, !auto_mode_led_state);
automatic_mode = auto_mode_led_state;
if (automatic_mode) {
autoTimerId = timer.setInterval(2000L, automatic_traffic_light);
} else {
timer.deleteTimer(autoTimerId);
}
}
}
void automatic_traffic_light() {
if (automatic_mode) {
red_led_state = !red_led_state;
digitalWrite(red_led_pin, !red_led_state);
delay(2000);
red_led_state = !red_led_state;
digitalWrite(red_led_pin, !red_led_state);
orange_led_state = !orange_led_state;
digitalWrite(orange_led_pin, !orange_led_state);
delay(2000);
orange_led_state = !orange_led_state;
digitalWrite(orange_led_pin, !orange_led_state);
green_led_state = !green_led_state;
digitalWrite(green_led_pin, !green_led_state);
delay(2000);
green_led_state = !green_led_state;
digitalWrite(green_led_pin, !green_led_state);
}
}