Arduino代码 - while(0)的用途是什么?

时间:2017-10-07 19:36:15

标签: c arduino

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);是什么?

----原始代码----     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);
  }

}

2 个答案:

答案 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>