有没有一种更清洁的方法,可以仅在循环中运行一次操作?

时间:2020-10-19 02:02:55

标签: arduino arduino-uno arduino-c++

我有一个正在接受输入的按钮,当我按下该按钮时,指示灯会切换。

现在,我通常在循环功能中切换一次灯光,这有点混乱。

我不希望它在按住按钮时不断切换。

这是我当前的代码:

bool inboxLightsEnabled = false;

void setup() {

  //Analog pin mode
  pinMode(A0, INPUT);

  //Digital pin mode
  pinMode(2, OUTPUT);
  
}

bool buttonPressRecieved = false;

void loop() {
  
  if(analogRead(A0) >= 1000) {
    if(!buttonPressRecieved) {
      
      //The button has been pressed and not recieved yet so process it
      inboxLightsEnabled = !inboxLightsEnabled;
      
      buttonPressRecieved = true; //We have received the button press so make sure we don't receive it again
      
    }
  } else {
    buttonPressRecieved = false; //The button stopped being pressed so make this false
  }

  digitalWrite(2, inboxLightsEnabled);
  
}

没关系做这种清洁剂是可以的,但是我需要知道是否可以这样做。

我还使用了AnalogRead,因为当我将DigitalRead用作输入时,digitalRead似乎在开和关之间闪烁。

有人知道吗?

2 个答案:

答案 0 :(得分:2)

也许这会有所帮助:

/api/.env

这将在按下按钮时触发功能。 不知道这是否对您有帮助,因为您的问题对我来说还不是很清楚,但是我认为这可能会解决。 这个怎么运作: 当循环正在运行并且按下按钮时,buttonState为true,buttonStateBefore为false。真> 1,假为0,则真大于假。因此,函数doStuff()被调用。之后,buttonStateBefore是buttonState,因此它也适用。如果在下一个圆圈中仍按此按钮,则两个按钮都为true,因此不会调用该函数。

答案 1 :(得分:0)

不确定analogRead()的含义,因为您没有解释。

就切换操作而言,它可以通过以下一行完成:

digitalWrite(2, !digitalRead(2));
相关问题