#define BLYNK_TEMPLATE_ID "TMPL39XCmVFxS"
#define BLYNK_TEMPLATE_NAME "Fan control"
#define BLYNK_AUTH_TOKEN "_zllvujsDe31BxUVihhDqdTjS0iEvqNF"
// 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;
#define button1_pin 26
#define button2_pin 25
#define button3_pin 33
#define button4_pin 32
#define Up 18
#define Down 19
#define relay1_pin 13
#define relay2_pin 12
#define relay3_pin 14
#define relay4_pin 27
#define relay5_pin 15 //pwm
#define ZVC 2 //D2
#define triacPulse 4 //D4
int relay1_state = 0;
int relay2_state = 0;
int relay3_state = 0;
int relay4_state = 0;
int count=0;
int maxcount=10;
int mincount=0;
int lastcount=0; // variable for reading the pushbutton status
int lastpinup=LOW;
int lastpindown=LOW;
int dimming;
//Change the virtual pins according the rooms
#define button1_vpin V1
#define button2_vpin V2
#define button3_vpin V3
#define button4_vpin V4
#define button5_vpin V5
//------------------------------------------------------------------------------
// 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);
Blynk.syncVirtual(button5_vpin);
}
//--------------------------------------------------------------------------
// 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(relay1_pin, relay1_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button2_vpin) {
relay2_state = param.asInt();
digitalWrite(relay2_pin, relay2_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button3_vpin) {
relay3_state = param.asInt();
digitalWrite(relay3_pin, relay3_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button4_vpin) {
relay4_state = param.asInt();
digitalWrite(relay4_pin, relay4_state);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(button5_vpin) {
count = param.asInt();
//digitalWrite(relay5_pin, relay5_state);
}
//--------------------------------------------------------------------------
//BLYNK_WRITE(button6_vpin) {
// relay4_state = param.asInt();
// digitalWrite(relay6_pin, relay6_state);
//}
//--------------------------------------------------------------------------
void setup()
{
// Debug console
Serial.begin(115200);
//--------------------------------------------------------------------
pinMode(button1_pin, INPUT_PULLUP);
pinMode(button2_pin, INPUT_PULLUP);
pinMode(button3_pin, INPUT_PULLUP);
pinMode(button4_pin, INPUT_PULLUP);
pinMode(Up, INPUT_PULLUP);
pinMode(Down, INPUT_PULLUP);
pinMode(ZVC, INPUT_PULLUP);
pinMode(triacPulse, OUTPUT);
//--------------------------------------------------------------------
pinMode(relay1_pin, OUTPUT);
pinMode(relay2_pin, OUTPUT);
pinMode(relay3_pin, OUTPUT);
pinMode(relay4_pin, OUTPUT);
pinMode(relay5_pin, OUTPUT);// PWM for Fan
//--------------------------------------------------------------------
//During Starting all Relays should TURN OFF
digitalWrite(relay1_pin, HIGH);
digitalWrite(relay2_pin, HIGH);
digitalWrite(relay3_pin, HIGH);
digitalWrite(relay4_pin, HIGH);
//--------------------------------------------------------------------
Blynk.begin(auth, ssid, pass);
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
//--------------------------------------------------------------------
//Blynk.virtualWrite(button1_vpin, relay1_state);
//Blynk.virtualWrite(button2_vpin, relay2_state);
//Blynk.virtualWrite(button3_vpin, relay3_state);
//Blynk.virtualWrite(button4_vpin, relay4_state);
//--------------------------------------------------------------------
//attachInterrupt(digitalPinToInterrupt(ZVC), acon, FALLING); // attach Interrupt at PIN2
}
void loop()
{
Blynk.run();
timer.run();
// You can inject your own code or combine it with other sketches.
// Check other examples on how to communicate with Blynk. Remember
// to avoid delay() function!
listen_push_buttons();
dimming = map(count, 0, 10, 7200, 200); //0.2ms 7.2 ms
attachInterrupt(digitalPinToInterrupt(ZVC), acon, FALLING);
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void listen_push_buttons(){
//--------------------------------------------------------------------------
if(digitalRead(button1_pin) == LOW){
delay(200);
control_relay(1);
Blynk.virtualWrite(button1_vpin, relay1_state); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(button2_pin) == LOW){
delay(200);
control_relay(2);
Blynk.virtualWrite(button2_vpin, relay2_state); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(button3_pin) == LOW){
delay(200);
control_relay(3);
Blynk.virtualWrite(button3_vpin, relay3_state); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(button4_pin) == LOW){
delay(200);
control_relay(4);
Blynk.virtualWrite(button4_vpin, relay4_state); //update button state
}
//--------------------------------------------------------------------------
else if ((digitalRead(Up) == LOW || digitalRead(Down) == LOW ) && digitalRead ( relay4_state == HIGH))
{
delay(200);
control_relay(5);
Blynk.virtualWrite(button5_vpin, count); //update button sliderbar}
}
//--------------------------------------------------------------------------
//else if (digitalRead(Down) == LOW){
// if(relay4_state = 1)
//{delay(200);
// control_relay(5);
// Blynk.virtualWrite(button5_vpin, count); }//update button sliderbar
//}
//--------------------------------------------------------------------------
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void control_relay(int relay){
//------------------------------------------------
if(relay == 1){
relay1_state = !relay1_state;
digitalWrite(relay1_pin, relay1_state);
Serial.print("Relay1 State = ");
Serial.println(relay1_state);
delay(50);
}
//------------------------------------------------
else if(relay == 2){
relay2_state = !relay2_state;
digitalWrite(relay2_pin, relay2_state);
Serial.print("Relay2 State = ");
Serial.println(relay2_state);
delay(50);
}
//------------------------------------------------
else if(relay == 3){
relay3_state = !relay3_state;
digitalWrite(relay3_pin, relay3_state);
Serial.print("Relay3 State = ");
Serial.println(relay3_state);
delay(50);
}
//------------------------------------------------
else if(relay == 4){
relay4_state = !relay4_state;
digitalWrite(relay4_pin, relay4_state);//fan on
Serial.print("Relay4 State = ");
Serial.println(relay4_state);
delay(50);
}
//------------------------------------------------
else if(relay == 5){
int Upstatus = digitalRead(Up);
int Downstatus = digitalRead(Down);
if
(Upstatus == LOW && lastpinup == HIGH )
{
if (count < maxcount)
{count += 1;
Serial.print("Increased count to: ");
Serial.println(count);}
else
{ Serial.println("Maximum count reached to 10 ");}}
if(Downstatus == LOW && lastpindown == HIGH)
{
if (count > mincount)
{count -= 1;
Serial.print("Decrese count to: ");
Serial.println(count);}
else
{Serial.println("Minimum count reached to 0 ");}}
lastpinup = Upstatus;
lastpindown = Downstatus;
Serial.println(dimming);
delay(50);
}
//------------------------------------------------
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void acon()
{
Serial.println("REad");
delayMicroseconds(dimming); // read AD0
digitalWrite(triacPulse, HIGH);
delayMicroseconds(50); //delay 50 uSec on output pulse to turn on triac
digitalWrite(triacPulse, LOW);
Serial.println(digitalRead(triacPulse));
Serial.println(dimming);
}