[PICO]If-Else

Raspberry Pi Pico 2 If-Else 条件语句

在编程中,控制流是决定程序执行顺序的关键。if-else 语句是控制流中最基础且最重要的结构之一。它允许程序根据条件的不同执行不同的代码块。在 Raspberry Pi Pico 2 编程中,if-else 语句常用于根据传感器数据、按钮状态或用户输入做出决策。

本文将分别使用 Arduino 风格(基于 Arduino-Pico 核心)和 C/C++ 风格(基于官方 Pico SDK)来介绍 if-else 语句的用法,并提供实际案例。


1. 什么是 if-else 语句?

if-else 语句是一种条件判断结构。它的工作原理如下:

  • if 条件:如果条件为真(true),则执行 if 代码块中的语句。
  • else 条件:如果 if 条件为假(false),则执行 else 代码块中的语句。

1.1 基本语法(Arduino 风格)

1
2
3
4
5
if (condition) {
// 如果条件为真,执行这里的代码
} else {
// 如果条件为假,执行这里的代码
}
  • condition 是一个布尔表达式(结果为 truefalse)。
  • 如果 conditiontrue,则执行 if 代码块中的语句。
  • 如果 conditionfalse,则执行 else 代码块中的语句。

提示else 部分是可选的。如果不需要处理条件为假的情况,可以省略 else 代码块。

1.2 基本语法(C/C++ 风格)

C/C++ 风格的语法与 Arduino 风格完全一致,因为 Arduino 的语法本身就是基于 C/C++ 的。

1
2
3
4
5
if (condition) {
// 如果条件为真,执行这里的代码
} else {
// 如果条件为假,执行这里的代码
}

2. 代码示例:按钮控制 LED

以下是一个完整的示例,展示如何使用 if-else 语句根据按钮的按下状态控制板载 LED(GP25)的开关。

硬件连接

  • 按钮:连接到 GP0GND(使用内部上拉或外部下拉电阻)。
  • LED:使用板载 LED(GP25),无需额外接线。

2.1 Arduino 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const int LED_PIN = 25;      // 板载 LED 连接到 GP25
const int BUTTON_PIN = 0; // 按钮连接到 GP0

void setup() {
pinMode(LED_PIN, OUTPUT); // 设置 LED 引脚为输出模式
pinMode(BUTTON_PIN, INPUT_PULLUP); // 设置按钮引脚为输入模式,启用内部上拉电阻
}

void loop() {
int buttonState = digitalRead(BUTTON_PIN); // 读取按钮状态

if (buttonState == LOW) { // 按钮按下时(上拉电阻接入,按下为 LOW)
digitalWrite(LED_PIN, HIGH); // 如果按钮按下,点亮 LED
} else {
digitalWrite(LED_PIN, LOW); // 如果按钮未按下,关闭 LED
}
}

2.2 C/C++ 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "pico/stdlib.h"

#define LED_PIN 25
#define BUTTON_PIN 0

int main() {
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_up(BUTTON_PIN); // 启用内部上拉电阻

while (true) {
bool buttonState = gpio_get(BUTTON_PIN); // 读取按钮状态

if (buttonState == 0) { // 按钮按下时(上拉电阻接入,按下为 0)
gpio_put(LED_PIN, 1); // 如果按钮按下,点亮 LED
} else {
gpio_put(LED_PIN, 0); // 如果按钮未按下,关闭 LED
}
sleep_ms(10); // 简单的防抖延时
}
return 0;
}

代码解释

  • 硬件连接:按钮一端连接 GP0,另一端连接 GND。启用内部上拉电阻后,未按下时引脚为高电平(3.3V),按下时为低电平(0V)。
  • setup() / main():设置 LED 引脚为输出模式,按钮引脚为输入模式并启用上拉电阻。
  • loop() / while:持续读取按钮状态。如果按钮按下(LOW0),点亮 LED;否则关闭 LED。

备注digitalRead()(Arduino)和 gpio_get()(SDK)用于读取数字引脚的状态,返回 HIGH/LOW1/0


3. 实际应用场景

if-else 语句在 Pico 2 项目中有广泛的应用。以下是一些常见的场景:

  • 按钮控制:根据按钮的按下状态控制 LED、电机或其他设备。
  • 传感器数据判断:根据温度传感器、光线传感器等的数据做出决策。
  • 状态机:在复杂的项目中,if-else 语句可以用于实现状态机的逻辑。

3.1 案例:根据光线强度控制 LED

以下代码展示了如何使用 if-else 语句根据光线传感器的值控制 LED 的开关。

硬件连接

  • 光线传感器(如光敏电阻分压电路)连接到 GP26(ADC0)。
  • LED 连接到 GP25(板载 LED)。

Arduino 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const int LIGHT_SENSOR_PIN = 26;   // 光线传感器连接到 GP26 (ADC0)
const int LED_PIN = 25; // LED 连接到 GP25

void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
}

void loop() {
int lightValue = analogRead(LIGHT_SENSOR_PIN); // 读取光线传感器的值 (0–4095)

if (lightValue < 500) { // 如果光线较暗(数值较小)
digitalWrite(LED_PIN, HIGH); // 点亮 LED
Serial.println("Dark, LED ON");
} else {
digitalWrite(LED_PIN, LOW); // 如果光线较亮,关闭 LED
Serial.println("Bright, LED OFF");
}
delay(200);
}

C/C++ 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "pico/stdlib.h"
#include "hardware/adc.h"

#define LIGHT_SENSOR_PIN 26
#define LED_PIN 25

int main() {
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
adc_init();
adc_gpio_init(LIGHT_SENSOR_PIN);
adc_select_input(0); // ADC0 对应 GP26

while (true) {
uint16_t lightValue = adc_read(); // 读取光线值 (0–4095)

if (lightValue < 500) {
gpio_put(LED_PIN, 1);
printf("Dark, LED ON\n");
} else {
gpio_put(LED_PIN, 0);
printf("Bright, LED OFF\n");
}
sleep_ms(200);
}
return 0;
}

警告:在实际项目中,可能需要根据具体传感器和光照环境调整条件判断的阈值(例如示例中的 500)。

3.2 案例:温度控制风扇

假设你有一个模拟温度传感器(如 LM35)连接到 GP27(ADC1),当温度超过 30℃ 时打开风扇(连接到 GP0),否则关闭风扇。

Arduino 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const int TEMP_SENSOR_PIN = 27;   // 温度传感器连接到 GP27 (ADC1)
const int FAN_PIN = 0; // 风扇控制引脚

void setup() {
pinMode(FAN_PIN, OUTPUT);
Serial.begin(115200);
}

void loop() {
int raw = analogRead(TEMP_SENSOR_PIN);
float voltage = raw * 3.3 / 4095.0;
float temperature = voltage * 100.0; // LM35: 10mV/℃

if (temperature > 30.0) {
digitalWrite(FAN_PIN, HIGH);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" ℃, Fan ON");
} else {
digitalWrite(FAN_PIN, LOW);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" ℃, Fan OFF");
}
delay(1000);
}

C/C++ 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "pico/stdlib.h"
#include "hardware/adc.h"

#define TEMP_SENSOR_PIN 27
#define FAN_PIN 0

int main() {
stdio_init_all();
gpio_init(FAN_PIN);
gpio_set_dir(FAN_PIN, GPIO_OUT);
adc_init();
adc_gpio_init(TEMP_SENSOR_PIN);
adc_select_input(1); // ADC1 对应 GP27

while (true) {
uint16_t raw = adc_read();
float voltage = raw * 3.3f / 4095.0f;
float temperature = voltage * 100.0f;

if (temperature > 30.0f) {
gpio_put(FAN_PIN, 1);
printf("Temperature: %.2f ℃, Fan ON\n", temperature);
} else {
gpio_put(FAN_PIN, 0);
printf("Temperature: %.2f ℃, Fan OFF\n", temperature);
}
sleep_ms(1000);
}
return 0;
}

4. 总结

if-else 语句是 Raspberry Pi Pico 2 编程中不可或缺的工具。它允许程序根据条件执行不同的代码块,从而实现灵活的控制逻辑。通过本教程,您已经掌握了:

  • if-else 的基本语法(两种编程风格)。
  • 按钮控制 LED 的完整示例。
  • 光线控制和温度控制 等实际应用场景。
语句类型 作用
if 条件为真时执行代码块
else 条件为假时执行代码块

提示:编写 if-else 时注意区分赋值运算符 = 和比较运算符 ==,这是初学者常见的错误。对于 Pico 2 的 GPIO,所有逻辑电平均为 3.3V,输入不可承受 5V。


5. 附加资源与练习

为了巩固所学知识,建议尝试以下练习:

  • 练习 1:修改按钮控制 LED 的代码,使其在按钮按下时 LED 闪烁(例如亮 0.5 秒、灭 0.5 秒),松开时熄灭。
  • 练习 2:使用多个 if-else 语句实现更复杂的逻辑,例如根据光线强度分三档控制 LED 亮度(使用 PWM)。
  • 练习 3:结合温度和湿度传感器(如 DHT11),当温度高于 30℃ 且湿度高于 70% 时,启动风扇和除湿设备。

通过不断实践和探索,您将能够熟练运用 if-else 语句,并将其应用到更复杂的 Pico 2 项目中。


[PICO]If-Else
https://ka5fxt.cn/2026/03/30/PICO-If-Else/
发布于
2026年3月30日
许可协议