#define BLYNK_TEMPLATE_ID "TMPL3eiNE1QQe"
#define BLYNK_TEMPLATE_NAME "IoT waterpump"
#define BLYNK_AUTH_TOKEN "EBAt8dQcSNDQnWLUxX_47HnS4PH04XwH"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define bulb1_virtual V0
#define bulb2_virtual V1
#define bulb3_virtual V2
#define fan_virtual V3
#define allControl_virtual V4
const int pot = A0;
int bulb[] = {33, 25, 26};
int bulbstate[] = {LOW, LOW, LOW};
int switches[] = {34, 35, 32};
int allControl;
int fanlevel[] = {27, 14, 12};
int fanSpeed = 0;
BLYNK_WRITE(bulb1_virtual) {
bulbstate[0] = param.asInt();
updateBulbs(0);
}
BLYNK_WRITE(bulb2_virtual) {
bulbstate[1] = param.asInt();
updateBulbs(0);
}
BLYNK_WRITE(bulb3_virtual) {
bulbstate[2] = param.asInt();
updateBulbs(0);
}
BLYNK_WRITE(fan_virtual) {
fanSpeed = param.asInt();
fanSpeedControl();
}
BLYNK_WRITE(allControl_virtual) {
allControl = param.asInt();
if (allControl) {
for (int i = 0; i < 3; i++) {
bulbstate[i] = HIGH;
}
} else {
for (int i = 0; i < 3; i++) {
bulbstate[i] = LOW;
}
}
updateBulbs(500);
}
void setup() {
Blynk.begin(auth, ssid, pass);
pinMode(pot, INPUT);
for (int i = 0; i < 3; i++) {
pinMode(bulb[i], OUTPUT);
pinMode(fanlevel[i], OUTPUT);
digitalWrite(fanlevel[i], LOW);
pinMode(switches[i], INPUT);
}
}
void switches1() {
digitalRead(switches[0]) ? bulbstate[0] = HIGH : bulbstate[0] = LOW;
Blynk.virtualWrite(bulb1_virtual, bulbstate[0]);
updateBulbs(0);
}
void switches2() {
digitalRead(switches[1]) ? bulbstate[1] = HIGH : bulbstate[1] = LOW;
Blynk.virtualWrite(bulb2_virtual, bulbstate[1]);
updateBulbs(0);
}
void switches3() {
digitalRead(switches[2]) ? bulbstate[2] = HIGH : bulbstate[2] = LOW;
Blynk.virtualWrite(bulb3_virtual, bulbstate[2]);
updateBulbs(0);
}
void fanSpeedControl() {
if(fanSpeed == 1)
{
digitalWrite(fanlevel[0], HIGH);
digitalWrite(fanlevel[1], LOW);
digitalWrite(fanlevel[2], LOW);
}
if(fanSpeed == 2)
{
digitalWrite(fanlevel[0], LOW);
digitalWrite(fanlevel[1], HIGH);
digitalWrite(fanlevel[2], LOW);
}
if(fanSpeed == 3)
{
digitalWrite(fanlevel[0], HIGH);
digitalWrite(fanlevel[1], HIGH);
digitalWrite(fanlevel[2], LOW);
}
if(fanSpeed == 4)
{
digitalWrite(fanlevel[0], LOW);
digitalWrite(fanlevel[1], LOW);
digitalWrite(fanlevel[2], HIGH);
}
}
void updateBulbs(int a) {
for (int i = 0; i < 3; i++) {
digitalWrite(bulb[i], bulbstate[i]);
delay(a);
}
}
void manualSpeedControl() {
fanSpeed = map(analogRead(pot), 0, 1023, 0, 3);
fanSpeedControl();
Blynk.virtualWrite(fan_virtual, fanSpeed);
}
void loop() {
Blynk.run();
switches1();
switches2();
switches3();
manualSpeedControl();
}