深色模式
第 8 章:看懂 LED 代码
本章任务
看懂"点亮与闪烁 LED"的 Arduino C++ 代码——对应第一册第 3、4 章的实验,和第二册第 8 章是同一个任务,可以对照着读。
接线回顾
| 元件 | Pico 引脚 | 说明 |
|---|---|---|
| 板载 LED | GP25(板载,无需接线) | 芯片上自带的小灯 |
| 外接 LED 长脚(正极) | GP0 | 信号线 |
| 外接 LED 短脚(负极) | 经 100Ω 电阻接 GND | 限流保护 |
Mind+ 生成的典型代码
cpp
const int LED_ONBOARD = 25; // 给 25 号引脚(板载 LED)起个名字
const int LED_RED = 0; // 给 0 号引脚(外接 LED)起个名字
void setup() { // 上电后只执行一次:做准备
pinMode(LED_ONBOARD, OUTPUT); // 板载 LED 引脚设为"输出"模式
pinMode(LED_RED, OUTPUT); // 外接 LED 引脚设为"输出"模式
}
void loop() { // 然后一直重复下面四行
digitalWrite(LED_ONBOARD, HIGH); // 板载 LED:输出高电平(亮)
digitalWrite(LED_RED, HIGH); // 外接 LED:输出高电平(亮)
delay(500); // 保持 500 毫秒(0.5 秒)
digitalWrite(LED_ONBOARD, LOW); // 板载 LED:输出低电平(灭)
digitalWrite(LED_RED, LOW); // 外接 LED:输出低电平(灭)
delay(500); // 保持 0.5 秒
}代码讲解
这段代码分两部分:
开头两行 + setup()(准备工作,只执行一次)
const int LED_ONBOARD = 25;是"给引脚起名字":以后写LED_ONBOARD就等价于写25,代码更好读pinMode(引脚, OUTPUT)是"登记引脚":告诉 Pico 这几号脚是用来输出的,相当于 Python 的Pin(25, Pin.OUT)
loop() 循环(一直重复)
digitalWrite(引脚, HIGH)就是"高电平",相当于积木里的"LED 输出 高电平"——灯亮digitalWrite(引脚, LOW)就是"低电平"——灯灭delay(500)对应"等待 0.5 秒"积木(注意单位是毫秒,500 毫秒 = 0.5 秒)- 不用写
while True——loop()本身就是无限循环 - 四行合起来:亮 0.5 秒 → 灭 0.5 秒 → 再亮……就是闪烁
运行效果
板载 LED 和面包板上的外接 LED 同步闪烁,间隔 0.5 秒——和用积木做出来的一模一样,也和第二册 Python 版一模一样。
常见坑
- 看到代码里写
pinMode(25, ...),这里的 25 是 GP 编号;板载 LED 固定在 GP25,不在 40 个针脚里 - 外接 LED 不亮:先检查长脚是不是接 GP0,再检查代码里的编号有没有写错
- 每行末尾的分号
;不能少,少了编译就报错——报错行往往指向下一行,往前找
想一想
如果想让灯闪得更快,代码里哪两个数字要改?改成什么方向(大还是小)?
💡 查看答案
改两个
delay(500)里的 500,往小改——比如改成100,灯就每秒闪 5 次。注意单位是毫秒:100 毫秒 = 0.1 秒。如果想让两个灯交替闪(一个亮时另一个灭),
loop()里的四行该怎么改?改完翻回第二册第 8 章,看看 Python 版的改法是不是一个思路💡 查看答案
让两个灯的电平始终相反:
cppvoid loop() { digitalWrite(LED_ONBOARD, HIGH); // 板载亮 digitalWrite(LED_RED, LOW); // 外接灭 delay(500); digitalWrite(LED_ONBOARD, LOW); // 板载灭 digitalWrite(LED_RED, HIGH); // 外接亮 delay(500); }和第二册 Python 版的思路一模一样——逻辑相同,只是换了语言。
