Итак, я работаю над системой обратной связи для домашней автоматизации , которая обновляет состояние физической кнопки, подключенной к вашей плате, на Blynk приложение, так что вы можете управлять своими огнями как вручную, так и через приложение. Я использую плату ESP32 . Состояние физической кнопки, подключенной к плате, определяется и отправляется на виртуальную кнопку. в приложении blynk, используя собственную логику c blynk, то есть param.asInt (). следовательно, я не могу использовать логи c обычного переключателя, например:
if (digitalRead(PUSH_BUTTON_1) == LOW) {
digitalWrite(RELAY_PIN_1, HIGH);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_1, HIGH);}
, так как я должен использовать relay1State, который задан как param.asInt (); обновить приложение blynk. Также, если я использую этот тип кода, у меня возникают последовательные переключения в приложении blynk:
void checkPhysicalButton()
{
if (digitalRead(PUSH_BUTTON_1) == HIGH) {
relay1State =!relay1State;
digitalWrite(RELAY_PIN_1, relay1State);
Blynk.virtualWrite(VPIN_BUTTON_1, relay1State);
}
else {
digitalWrite(RELAY_PIN_1, relay1State);
Blynk.virtualWrite(VPIN_BUTTON_1, relay1State);
}}
, поэтому я должен использовать свою логику состояния кнопки c, чтобы удалить последовательное переключение. Но я не могу использовать его в качестве переключателя «Нажмите для включения, отпустите для выключения». он работает как тумблер - «нажмите один раз, чтобы включить, и нажмите еще раз, чтобы выключить его». Я хочу изменить эту логику c на Нажать для включения, отпустить для отключения. Пожалуйста, помогите мне. Спасибо!
BLYNK_WRITE(VPIN_BUTTON_1) {
relay1State = param.asInt();
digitalWrite(RELAY_PIN_1, relay1State);
}
void checkPhysicalButton()
{
if (digitalRead(PUSH_BUTTON_1) == LOW) {
// pushButton1State is used to avoid sequential toggles
if (pushButton1State != LOW) {
// Toggle Relay state
relay1State = !relay1State;
digitalWrite(RELAY_PIN_1, relay1State);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_1, relay1State);
}
pushButton1State = LOW;
} else {
pushButton1State = HIGH;
}