Arduino 中的 while 循环是一种控制结构,用于重复执行一段代码,直到指定的条件不再满足。它非常适合在需要持续监测某个状态并根据该状态执行操作的场景中使用。

while 循环的基本语法

while (条件) {
  // 当条件为 true 时执行的代码
}
  • 当程序执行到 while 循环时,首先检查括号中的条件
  • 如果条件为 true(真),则执行花括号内的代码块
  • 代码块执行完毕后,会再次检查条件,重复上述过程
  • 当条件变为 false(假)时,跳出循环,继续执行循环后面的代码

简单示例:LED 闪烁固定次数

下面是一个使用 while 循环让 LED 闪烁 5 次的例子:

// 定义LED引脚
const int ledPin = 13;

void setup() {
  // 设置LED引脚为输出模式
  pinMode(ledPin, OUTPUT);
  
  // 计数器变量
  int count = 0;
  
  // 当count小于5时,执行循环内的代码
  while (count < 5) {
    digitalWrite(ledPin, HIGH);  // 点亮LED
    delay(500);                  // 等待500毫秒
    digitalWrite(ledPin, LOW);   // 关闭LED
    delay(500);                  // 等待500毫秒
    
    count++;  // 计数器加1
  }
}

void loop() {
  // 循环结束后什么也不做
}

无限循环示例

如果条件始终为 truewhile 循环将无限执行,这在 Arduino 中很常见:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  // 无限循环,LED将持续闪烁
  while (true) {
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(13, LOW);
    delay(1000);
  }
}

实际上,Arduino 的 loop() 函数本身就是一个无限循环,所以上面的代码等效于更简单的形式:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

实用示例:等待按钮按下

while 循环非常适合等待某个事件发生,比如等待按钮按下:

// 定义引脚
const int buttonPin = 2;  // 按钮连接到引脚2
const int ledPin = 13;    // LED连接到引脚13

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);  // 设置按钮引脚为输入,启用内部上拉电阻
  pinMode(ledPin, OUTPUT);           // 设置LED引脚为输出
  
  // 等待按钮按下(当按钮未按下时,循环将一直执行)
  while (digitalRead(buttonPin) == HIGH) {
    // 按钮未按下时,LED闪烁
    digitalWrite(ledPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);
    delay(200);
  }
  
  // 当按钮按下后,跳出循环,LED常亮
  digitalWrite(ledPin, HIGH);
}

void loop() {
  // 什么也不做
}

while 循环使用注意事项

  1. 避免无限循环陷阱:确保循环条件最终会变为 false,否则程序将永远停留在循环中
  2. 循环内的延迟delay() 函数会暂停整个程序,在需要响应外部事件时要谨慎使用
  3. 条件更新:确保在循环内部有代码能够改变条件的状态,否则可能导致无限循环
  4. 与 for 循环的区别while 循环更适合条件复杂或循环次数不确定的情况,而 for 循环更适合已知循环次数的情况

通过这些示例,你应该能够理解 while 循环的工作原理并在自己的 Arduino 项目中灵活运用了。

0 条评论

目前还没有评论...