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);
}
}
基本上代码的工作原理如下:
我有一个Arduino,HC 06蓝牙模块,一个按钮和一个按下按钮时拨打电话的应用程序(HC 06发送一个字节,1到应用程序)
我的问题是,while (0);
是什么?
----原始代码---- const int PirSensor = 2; int motionState = 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);
}
}
答案 0 :(得分:0)
好吧,如果我在这种情况下没有错的话。
在大多数计算机编程语言中,while循环是一种控制流语句,它允许根据给定的布尔条件重复执行代码。 while循环可以被认为是重复的if语句。
请注意,如果您确实有条件,则while循环必须具有退出选项,如下所示:
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);
int a =0;
while(a==0){
if (something)
a=1;
}
}
}
然后在您选择的条件下,您将退出循环。
答案 1 :(得分:0)
while(0)
最常用于宏定义中,尤其是在那些将用于void
函数或其他指令(如
#define inc(x) do { x = ((x)+1); } while (0)
使用它的原因仅仅是通过强制用户将;
附加到宏调用来使宏的使用看起来像是对函数的调用。在上面的示例中,
inc(a)
a = a*2;
由于宏扩展到;
之后缺少while(0)
,将导致编译错误,因此您必须编写
inc(a);
a = a*2;
使代码看起来更像inc
是一个函数。同样,将宏的代码嵌入这样的循环中有助于防止意外使用宏作为表达式,类似于void
函数。 (a = ((a)+1)
是一个有效的表达式,因此,如果该宏不包含(显然无关)b = inc(a)
循环,则b = a = ((a)+1)
也将是有效的(扩展为while
)。) / p>