【发布时间】:2017-10-07 19:36:15
【问题描述】:
const int buttonPin = 2;
int buttonState = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Serial.println("1");
buttonState=LOW;
delay(20000);
while(0);
}
}
基本上代码是这样工作的:
- 按钮针的编号
- 用于读取按钮状态的变量
- 将按钮引脚初始化为输入:
- 读取按钮值的状态:
- 检查按钮是否被按下。如果是,则 buttonState 为 HIGH: 通过蓝牙发送 char 1:
我有一个 Arduino、HC 06 蓝牙模块、一个按钮和一个在按下按钮时拨打电话的应用程序(HC 06 向应用程序发送一个字节 1)
我的问题是,while (0); 是干什么用的?
----原始代码---- 常量 int PirSensor = 2; int 运动状态 = 0;
void setup() {
Serial.begin(9600);
pinMode(PirSensor, INPUT);
}
void loop() {
motionState = digitalRead(PirSensor);
if (motionState == HIGH) {
Serial.println("1");
motionState = LOW;
delay(20000);
// while(0);
}
}
【问题讨论】:
-
它什么也没做,就像那样。你为什么把它放在那里?
-
因为我从另一个添加了我的代码,而不是按钮,它有一个 PIR 运动检测器。我无法理解这段时间的含义。
-
@PedroFerreita 你能展示一下原来的例子吗?
-
您看到
while (0);的最常见上下文是在do { … } while (0);循环的末尾。我认为公平地说这是while (0);有用的唯一上下文。就目前而言,循环的空体永远不会执行,因为循环继续条件无条件为假(零)。一种常见的替代方法是无限循环——while (1) { … },有时会有一个空循环体。这次条件无条件为真(非零)。 -
我见过 do{} while(0) 在预处理器宏中用于防范某些事情,但我不记得它是什么了。我认为这是为了确保放在后面的多语句宏没有大括号,就像它们是单行一样。