arduino - 有没有一种更简洁的方法可以只在循环中运行一次动作?
问题描述
我有一个用于输入的按钮和一个在我按下按钮时会切换的灯。
现在我通常在循环功能中切换一次灯,这有点乱。
我不希望它在按住按钮时不断切换。
这是我当前的代码:
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 似乎在打开和关闭之间闪烁。
有人知道吗?
解决方案
马贝这将有助于:
bool buttonState = false, buttonStateBefore = false;
void loop()
{
buttonSate = digitalRead(ButtonPin);
if(buttonState > buttonStateBefore) doStuff();
buttonStateBefore = buttonState;
}
这将触发按钮按下的功能。不知道这是否有帮助,因为你的问题对我来说不是很清楚,但我认为这可能会做到。工作原理:当循环运行并按下按钮时,buttonState 为 true,而 buttonStateBefore 为 false。真>1,假0,真大于假。因此函数 doStuff() 被调用。之后 buttonStateBefore 是 buttonState 所以它也是真的。如果在下一个圆圈中仍然按下按钮,则它们都为真,因此不会调用该函数。
推荐阅读
- reactjs - 将按钮宽度设置为父级的“全宽”
- java - 从 textView 中提取部分文本并使该文本可点击?
- javascript - Rails - 复选框不会改变值
- r - R中的先验算法
- javascript - 是否可以通过引用传递或访问实际对象?
- angular - 带有自定义管道的Angular 7键值管道以过滤掉值的数据
- python - 如何从geoJSON文件中计算几个MultiPolygons的面积?
- yocto - 如何从第二个 git 存储库将其他代码添加到 Yocto 内核?
- firebase - 尝试为 HashMap 引入 Firestore 安全规则并相互同步查询
- php - 用于多种模式的 Laravel 正则表达式不起作用?