@Jon, спасибо за подсказку, скетч переработал, теперь работает отлично
Код:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = "xxxx";
const int OSPin = 12; //open State Pin
const int CSPin = 14; //close State Pin
const int LedOSPin = V12; //open State VPin for Led
const int LedCSPin = V14; //close State VPin for Led
const int LCDPin1 = V1; //VPin for LCD строка 1
const int LCDPin2 = V2; //VPin for LCD строка 2
boolean LastStateCSPin; //Флаг последнего состояния пина close State Pin
boolean LastStateOSPin; //Флаг последнего состояния пина open State Pin
boolean StateCSPin; //Флаг текущего состояния пина close State Pin
boolean StateOSPin; //Флаг текущего состояния пина open State Pin
int state; //флаг состояния ворот для цикла проверки
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, "XXXXX", "XXXXX");
while (Blynk.connect() == false) {
// Wait until connected
}
pinMode(OSPin, INPUT);
pinMode(CSPin, INPUT);
Blynk.virtualWrite(LedOSPin, 0);
Blynk.virtualWrite(LedCSPin, 0);
}
void checkState()
{
if(StateOSPin==HIGH&&state!=0)
{
state = 0;
Blynk.virtualWrite(LCDPin1, " open"); //вывод состояни на виджет LCD, строка 1
Blynk.virtualWrite(LCDPin2, " "); //вывод состояни на виджет LCD, строка 2
Blynk.virtualWrite(LedOSPin, 1023); //включаем виджет LED состояния "открыто"
Blynk.virtualWrite(LedCSPin, 0); //тушим виджет LED состояния "закрыто"
Blynk.notify("open"); //шлем на смартфон оповещение "ворота открыты"
}
if(StateCSPin==HIGH&&state!=1)
{
state = 1;
Blynk.virtualWrite(LCDPin1, "close"); //вывод состояни на виджет LCD, строка 1
Blynk.virtualWrite(LCDPin2, " "); //вывод состояни на виджет LCD, строка 2
Blynk.virtualWrite(LedOSPin, 0); //тушим виджет LED состояния "открыто"
Blynk.virtualWrite(LedCSPin, 1023); //включаем виджет LED состояния "закрыто"
Blynk.notify("close"); // шлем на смартфон оповещение "ворота закрыты"
}
if(StateOSPin==LOW&&StateCSPin==LOW&&LastStateCSPin==HIGH&&state!=3)
{
state = 3;
Blynk.virtualWrite(LCDPin1, "opening"); //вывод состояни на виджет LCD, строка 1
Blynk.virtualWrite(LCDPin2, "<--<--<--"); //вывод состояни на виджет LCD, строка 2
Blynk.virtualWrite(LedOSPin, 0); //тушим виджет LED состояния "открыто"
Blynk.virtualWrite(LedCSPin, 0); //тушим виджет LED состояния "закрыто"
Blynk.notify("opening"); //шлем на смартфон оповещение "ворота открываются"
}
if(StateOSPin==LOW&&StateCSPin==LOW&&LastStateOSPin==HIGH&&state!=4)
{
state = 4;
Blynk.virtualWrite(LCDPin1, "closing"); //вывод состояни на виджет LCD, строка 1
Blynk.virtualWrite(LCDPin2, "-->-->-->"); //вывод состояни на виджет LCD, строка 2
Blynk.virtualWrite(LedOSPin, 0); //тушим виджет LED состояния "открыто"
Blynk.virtualWrite(LedCSPin, 0); //тушим виджет LED состояния "закрыто"
Blynk.notify("closing..."); //шлем на смартфон оповещение "ворота закрываются"
}
LastStateCSPin = StateCSPin; //запоминаем последнее состояние пина close State Pin
LastStateOSPin = StateOSPin; //запоминаем последнее состояние пина open State Pin
}
void loop()
{
Blynk.run();
StateCSPin = digitalRead(CSPin); //запоминаем текущее состояние пина close State Pin
StateOSPin = digitalRead(OSPin); //запоминаем текущее состояние пина open State Pin
checkState();
}