0

所以基本上,我正在开发一个用于家庭自动化的反馈系统,它将连接到你的板的物理按钮的状态更新到Blynk应用程序上,这样你就可以通过手动和通过应用程序来控制你的灯。我正在使用ESP32板。连接到板的物理按钮的状态被获取并发送到blynk应用程序上的虚拟按钮,使用blynk的本机逻辑,即param.asInt()。因此我不能使用正常的逻辑像这样切换:

if (digitalRead(PUSH_BUTTON_1) == LOW) {
digitalWrite(RELAY_PIN_1, HIGH);

// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_1, HIGH);}

因为我必须使用以 param.asInt() 形式给出的 relay1State;更新 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);

 }}      

所以因此我必须使用我的按钮状态逻辑来删除顺序切换。但我无法将它用作“按下打开,释放关闭”开关。它用作拨动开关-“按一次转动,再按一次将其关闭。” 我想将此逻辑更改为按下打开,释放关闭。请帮助我。谢谢!

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;
}  
4

0 回答 0