首页 > 解决方案 > 空的while循环没有它的代码不起作用

问题描述

我遇到了一些相扑机器人的代码。我不明白为什么代码中使用了while(BTN)。while循环有什么用?

没有第一个while(BTN)代码不起作用,没有第二个,机器人不会停止。下面列出了所有相关代码。

#include <Wire.h>
void setup() {
  //Button
  pinMode(A2, INPUT);
  digitalWrite(A2, HIGH);
  #define BTN !digitalRead(A2)
void loop() {
  Forward(0, 0); //Stop motors 
  delay(100);
if (BTN) { //Turn on program with button
    while (BTN) {}
    while (!BTN) { //stop robot if button is pushed again
//code to move the robot was included here
} 
while(BTN){}
 }
}

标签: c++arduino

解决方案


考虑BTN扩展后的代码:

if (!digitalRead(A2)) {
    while (!digitalRead(A2)) {}
    while (digitalRead(A2)) {
        // move code
    }
    while (!digitalRead(A2)) {}
}

所以它说:

  • 如果按钮被按下;
  • 等到它不再关闭;
  • 然后执行移动代码,直到按钮再次按下
  • 并等到它不再下降。

注意此代码根本不考虑开关弹跳,它的行为可能有些不规律。)


推荐阅读