Hi I am using blynk with the app buttons and physical push button. I got the following code off of the forum! It works great for on off now I want one blynk and physical button to turn on a fan and the second to turn the fan off and on only if the fan is turned on already. The only problem with the code I got was it didn't have any comments and I am struggling with exactly what is turning the relay(s) on and off. Right now I just have it running two relays but I would have them both controlling the same one ideally.
#include <SPI.h>
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <TimeLib.h>
#include <SimpleTimer.h>
#define EspSerial Serial3 // Hardware Serial on Mega, Leonardo, Micro...
#define ESP8266_BAUD 115200 // Your ESP8266 baud rate:
char auth[] = "*********"; //off blynk project
char ssid[] = "8888888"; // Your WiFi credentials.
char pass[] = "********"; // Your WiFi credentials.
ESP8266 wifi(&EspSerial);
void lightOn();
void lightOff();
void lightOnOffOn();
void lightOnOffOff();
boolean FanONState = 0;
boolean FanONOFFState = 0; //added
boolean SwitchReset = true;
boolean SwitchResetONOFF = true; //added
const int FanONSwitch = 13;
const int RelayPin = 12;
const int FanONOFFSwitch = 11; //added
const int RelayPin2 = 10;
SimpleTimer timer;
WidgetLED VLED(V11);
WidgetLED VonoffLED(V12); //added
void setup()
{
//Serial.begin(115200);
EspSerial.begin(ESP8266_BAUD); // Set ESP8266 baud rate
delay(10);
Blynk.begin(auth, wifi, ssid, pass);
{
pinMode(RelayPin, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(FanONSwitch, INPUT_PULLUP);
pinMode(FanONOFFSwitch, INPUT_PULLUP); //added
delay(10);
digitalWrite(RelayPin, LOW);
digitalWrite(RelayPin2, LOW);
timer.setInterval(100, ButtonCheck);
timer.setInterval(100, ButtonONOFFCheck); //added
}
}
void loop()
{
Blynk.run();
timer.run();
}
void ButtonCheck() {
boolean SwitchState = (digitalRead(FanONSwitch));
if (!SwitchState && SwitchReset == true) {
if (FanONState) {
lightOff();
} else {
lightOn();
}
SwitchReset = false;
delay(50);
}
else if (SwitchState) {
SwitchReset = true;
}
}
void ToggleRelay() {
FanONState = !FanONState;
if (FanONState) {
lightOn();
}
else lightOff();
}
void ButtonONOFFCheck() {
boolean SwitchStateONOFF = (digitalRead(FanONOFFSwitch));
if (!SwitchStateONOFF && SwitchResetONOFF == true) {
if (FanONOFFState) {
lightOnOffOff();
} else {
lightOnOffOn();
}
SwitchResetONOFF = false;
delay(50);
}
else if (SwitchStateONOFF) {
SwitchResetONOFF = true;
}
}
void ToggleRelayONOFF() {
FanONOFFState = !FanONOFFState;
if (FanONOFFState) {
lightOnOffOn();
}
else lightOnOffOff();
}
void lightOn() {
digitalWrite(RelayPin, HIGH);
FanONState = 1;
Blynk.virtualWrite(V5, HIGH);
VLED.off();
}
void lightOnOffOn() {
digitalWrite(RelayPin2, HIGH);
FanONOFFState = 1;
Blynk.virtualWrite(V6, HIGH);
VonoffLED.off();
}
void lightOff() {
digitalWrite(RelayPin, LOW);
FanONState = 0;
Blynk.virtualWrite(V5, LOW);
VLED.on();
}
void lightOnOffOff() {
digitalWrite(RelayPin2, LOW);
FanONOFFState = 0;
Blynk.virtualWrite(V6, LOW);
VonoffLED.on();
}
BLYNK_WRITE(V5) {
int SwitchStatus = param.asInt();
if (SwitchStatus == 2){
ToggleRelay();
}
else if (SwitchStatus){
lightOn();
}
else lightOff();
}
BLYNK_WRITE(V6) {
int SwitchStatusONOFF = param.asInt();
if (SwitchStatusONOFF == 2){
ToggleRelayONOFF();
}
else if (SwitchStatusONOFF){
lightOnOffOn();
}
else lightOnOffOff();
}