Hi guys, i new in arduino and blynk, i use nodemcu esp8266, can anyone help? i want to make virtual pin just to push state 3 (case 3 //starter) in my code, i have 4 state case push with single button to on/off multiple relay, can anyone know how to insert it??
// Multiple state handling
//Version 1.00
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
char auth[] = "h5bh81r6leLuHbe188Zt8k0K8eKmNyF8";
char ssid[] = "RIZKY";
char pass[] = "langit123";
#define relayOFF HIGH
#define relayON !relayOFF
#define PUSHED HIGH
#define relay1 D1
#define relay2 D2
#define relay3 D3
#define relay4 D5
#define capSwitch D4 //tombol HIGH = pushed?
//when relay4Flag is true we are timing relay 4
boolean relay4Flag = false;
boolean relay1Flag = false;
boolean relay3Flag = false;
byte state = 0;
byte buttonPoll = 0;
byte lastButtonPoll;
//timing stuff
unsigned long switchMillis;
unsigned long relay4Millis;
unsigned long relay1Millis;
unsigned long relay3Millis;
const unsigned long relay4Interval = 1000; //one second
const unsigned long relay1Interval = 1000; //one second
const unsigned long relay3Interval = 1000; //one second
//*************************************************************************
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
pinMode(capSwitch, INPUT); //pushed = HIGH?
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
digitalWrite(relay1, relayOFF);
digitalWrite(relay2, relayOFF);
digitalWrite(relay3, relayOFF);
digitalWrite(relay4, relayOFF);
} //END of setup()
//*************************************************************************
void loop()
{
Blynk.run();
//********************************
//is it time to check our switches? (every 50 millis seconds)
if (millis() - switchMillis >= 50)
{
//restart this timer
switchMillis = millis();
//see what's happening with our switches
checkSwitches();
}
//********************************
//when we are timing relay 4, has the timer finished?
if (relay4Flag == true && millis() - relay4Millis >= relay4Interval)
{
//disable timing
relay4Flag = false;
digitalWrite(relay4, relayOFF);
}
if (relay1Flag == true && millis() - relay1Millis >= relay1Interval)
{
//disable timing
relay1Flag = false;
digitalWrite(relay1, relayON);
}
if (relay3Flag == true && millis() - relay3Millis >= relay3Interval)
{
//disable timing
relay3Flag = false;
digitalWrite(relay3, relayON);
}
//********************************
//check the StateMachine
stateMachine();
//********************************
// other none blocking code goes here
//********************************
} //END of loop()
//*************************************************************************
void checkSwitches()
{
buttonPoll = digitalRead(capSwitch);
//has the switch changed state?
if (lastButtonPoll != buttonPoll)
{
//update to the new state
lastButtonPoll = buttonPoll;
//****************************
//is the switch PUSHED
if (buttonPoll == PUSHED)
{
//do nothing
}
//****************************
//switch has been released
else
{
state++;
if (state > 4)
{
state = 0;
relay1Flag = false;
digitalWrite(relay1, relayOFF);
digitalWrite(relay2, relayOFF);
relay3Flag = false;
digitalWrite(relay3, relayOFF);
//disable timing
relay4Flag = false;
digitalWrite(relay4, relayOFF);
}
}
} //END of if (lastButtonPoll != buttonPoll)
} //END of checkSwitches()
//*************************************************************************
void stateMachine()
{
switch (state)
{
//******************
case 0:
//do nothing
break;
//******************
case 1: //on
digitalWrite(relay1, relayON);
digitalWrite(relay2, relayOFF);
digitalWrite(relay3, relayOFF);
digitalWrite(relay4, relayOFF);
break;
//******************
case 2: //acc
digitalWrite(relay1, relayON);
digitalWrite(relay2, relayON);
digitalWrite(relay3, relayON);
digitalWrite(relay4, relayOFF);
break;
//******************
case 3: //stater
relay1Flag = true;
digitalWrite(relay1, relayOFF);
relay1Millis = millis();
digitalWrite(relay2, relayON);
//enable timing
relay4Flag = true;
digitalWrite(relay4, relayON);
//start timer
relay4Millis = millis();
relay3Flag = true;
digitalWrite(relay3, relayOFF);
relay3Millis = millis();
state = 4;
break;
//******************
case 4:
//do nothing
break;
//******************
default:
break;
} //END of switch/case
} //END of stateMachine()