#define BLYNK_TEMPLATE_ID "TMPL67QIpsEuj"
#define BLYNK_TEMPLATE_NAME "Chase the Lights ESP32 with Blynk"
#define BLYNK_AUTH_TOKEN "fpP-v6CB54du4b28MNI6KcpBPaXjqXIn"
#include <LiquidCrystal_I2C.h>
// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
int relay1_state = 0;
int relay2_state = 0;
int relay3_state = 0;
int relay4_state = 0;
//Change the virtual pins according the rooms
#define button1_vpin V0
#define button2_vpin V1
#define button3_vpin V2
#define button4_vpin V3
//------------------------------------------------------------------------------
// This function is called every time the device is connected to the Blynk.Cloud
// Request the latest state from the server
BLYNK_CONNECTED() {
Blynk.syncVirtual(button1_vpin);
Blynk.syncVirtual(button2_vpin);
Blynk.syncVirtual(button3_vpin);
Blynk.syncVirtual(button4_vpin);
}
// LCD configuration, number of rows and cols
int lcdColumns = 16;
int lcdRows = 2;
// Define pins for LEDs, buttons, and buzzer
#define redRelay 19
#define greenRelay 18
#define yellowRelay 5
#define blueRelay 17
#define buzzer 23
#define defultinterval 1500 //hold time for game over page
// Arrays to store LEDs and buttons
int relays[4] = { redRelay, greenRelay, yellowRelay, blueRelay };
// LCD object
LiquidCrystal_I2C lcd_1(0x27, lcdColumns, lcdRows);
//--------------------------------------------------------------------------
// This function is called every time the Virtual Pin state change
//i.e when web push switch from Blynk App or Web Dashboard
BLYNK_WRITE(button1_vpin) {
relay1_state = param.asInt();
digitalWrite(redRelay, relay1_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button2_vpin) {
relay2_state = param.asInt();
digitalWrite(greenRelay, relay2_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button3_vpin) {
relay3_state = param.asInt();
digitalWrite(yellowRelay, relay3_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button4_vpin) {
relay4_state = param.asInt();
digitalWrite(blueRelay, relay4_state);
}
//--------------------------------------------------------------------------
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
// Initialize LCD
lcd_1.init();
lcd_1.backlight();
// Set pin modes
pinMode(buzzer, OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(relays[i], OUTPUT);
}
lcd_1.setCursor(0, 0);
lcd_1.print("SONG THE LIGHTS");
lcd_1.setCursor(0, 1);
lcd_1.print(" Starting in: ");
lcd_1.print("3");
delay(1000);
lcd_1.setCursor(14, 1);
lcd_1.print("2");
delay(1000);
lcd_1.setCursor(14, 1);
lcd_1.print("1");
delay(1000);
lcd_1.clear();
}
void loop() {
Blynk.run();
timer.run();
listen_push_buttons();
// // // Turn off all LEDs and delay before next iteration
// for (int i = 0; i < 4; i++) {
// digitalWrite(relays[i], LOW);
// }
// delay(1000);
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void listen_push_buttons(){
//--------------------------------------------------------------------------
if(digitalRead(buttons[0]) == LOW){
delay(200);
control_relay(1);
Blynk.virtualWrite(button1_vpin, relay1_state); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(buttons[1]) == LOW){
delay(200);
control_relay(2);
Blynk.virtualWrite(button2_vpin, relay2_state); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(buttons[2]) == LOW){
delay(200);
control_relay(3);
Blynk.virtualWrite(button3_vpin, relay3_state); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(buttons[3]) == LOW){
delay(200);
control_relay(4);
Blynk.virtualWrite(button4_vpin, relay4_state); //update button state
}
//--------------------------------------------------------------------------
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void control_relay(int relay){
//------------------------------------------------
if(relay == 1){
relay1_state = !relay1_state;
digitalWrite(relays[0], relay1_state);
Serial.print("Relay1 State = ");
Serial.println(relays[0]);
delay(50);
}
//------------------------------------------------
else if(relay == 2){
relay2_state = !relay2_state;
digitalWrite(relays[1], relay2_state);
delay(50);
}
//------------------------------------------------
else if(relay == 3){
relay3_state = !relay3_state;
digitalWrite(relays[2], relay3_state);
delay(50);
}
//------------------------------------------------
else if(relay == 4){
relay4_state = !relay4_state;
digitalWrite(relays[3], relay4_state);
delay(50);
}
//------------------------------------------------
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM