有没有一种更简洁的方法,只循环一次 运行 一个动作?
Is there a cleaner way of only running an action once on loop?
我有一个从中获取输入的按钮和一个在我按下按钮时切换的灯。
现在我通常在循环功能中切换灯一次,有点乱。
我不希望它在按住按钮时不断切换。
这是我当前的代码:
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 似乎在打开和关闭之间闪烁。
有人知道吗?
不确定 analogRead()
的用途,因为你没有解释。
就切换操作而言,可以用一行来完成:
digitalWrite(2, !digitalRead(2));
也许这会有所帮助:
bool buttonState = false, buttonStateBefore = false;
void loop()
{
buttonSate = digitalRead(ButtonPin);
if(buttonState > buttonStateBefore) doStuff();
buttonStateBefore = buttonState;
}
这会在按下按钮时触发一个功能。
不知道这是否有帮助,因为我不太清楚你的问题,但我认为这可能会做到。
怎么运行的:
当循环为 运行 并且按下按钮时,buttonState 为真,buttonStateBefore 为假。真>1,假0,真大于假。因此函数 doStuff() 被调用。在那之后 buttonStateBefore 是 buttonState 所以它也是真的。如果按钮在下一个圆圈中仍被按下,则它们都为真,因此不会调用该函数。
我有一个从中获取输入的按钮和一个在我按下按钮时切换的灯。
现在我通常在循环功能中切换灯一次,有点乱。
我不希望它在按住按钮时不断切换。
这是我当前的代码:
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 似乎在打开和关闭之间闪烁。
有人知道吗?
不确定 analogRead()
的用途,因为你没有解释。
就切换操作而言,可以用一行来完成:
digitalWrite(2, !digitalRead(2));
也许这会有所帮助:
bool buttonState = false, buttonStateBefore = false;
void loop()
{
buttonSate = digitalRead(ButtonPin);
if(buttonState > buttonStateBefore) doStuff();
buttonStateBefore = buttonState;
}
这会在按下按钮时触发一个功能。 不知道这是否有帮助,因为我不太清楚你的问题,但我认为这可能会做到。 怎么运行的: 当循环为 运行 并且按下按钮时,buttonState 为真,buttonStateBefore 为假。真>1,假0,真大于假。因此函数 doStuff() 被调用。在那之后 buttonStateBefore 是 buttonState 所以它也是真的。如果按钮在下一个圆圈中仍被按下,则它们都为真,因此不会调用该函数。