【发布时间】:2017-09-25 00:40:22
【问题描述】:
我一直在尝试编写一个代码,以便在我按下一个按钮时基本上为分数加分,同时一定的时间不多了。我发现的问题是它没有检测到在时间减少时按下按钮的时间,实际上它只能检测到时间开始减少的时间,然后按钮处于哪个状态都没有关系继续加分。无论如何这里是主要代码:
void loop() {
buttonState01 = digitalRead(button01);
buttonState02 = digitalRead(button02);
buttonState03 = digitalRead(button03);
if (buttonState01){
time = 3000;
while(time > 0){
if (buttonState02){
score += 10;
Serial.println(score);
}
time--;
Serial.println(time);
}
}
}
如果需要,这里是完整的代码:
int button01 = 4;
int button02 = 3;
int button03 = 2;
int buttonState01 = 0;
int buttonState02 = 0;
int buttonState03 = 0;
float time;
int score;
void setup() {
score = 0;
time = 0;
pinMode(button01, INPUT);
pinMode(button02, INPUT);
pinMode(button03, INPUT);
Serial.begin(9600);
}
void loop() {
buttonState01 = digitalRead(button01);
buttonState02 = digitalRead(button02);
buttonState03 = digitalRead(button03);
if (buttonState01){
time = 3000;
while(time > 0){
if (buttonState02){
Serial.println("Points");
}
time--;
Serial.println(time);
}
}
}
【问题讨论】:
-
“我发现的问题是它没有检测到在时间减少时按下按钮的时间”。那是因为您在时间减少时没有阅读按钮。此外,任何地方都没有信号去抖动,因此除非您在硬件中安装了一些外部 RC 低通滤波器,否则此代码将永远无法可靠地工作。此外,如果外部没有拉电阻,则需要启用内部拉电阻。
-
发布的代码缺少很多必要的语句。建议阅读:arduino.cc/en/Reference/digitalRead> 以更好地理解“按钮”处理
标签: c loops if-statement while-loop arduino