Skip to content

第 8 章:看懂 LED 代码

本章任务

看懂"点亮与闪烁 LED"的 Arduino C++ 代码——对应第一册第 3、4 章的实验,和第二册第 8 章是同一个任务,可以对照着读。

接线回顾

元件Pico 引脚说明
板载 LEDGP25(板载,无需接线)芯片上自带的小灯
外接 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,再检查代码里的编号有没有写错
  • 每行末尾的分号 ; 不能少,少了编译就报错——报错行往往指向下一行,往前找

想一想

  1. 如果想让灯闪得更快,代码里哪两个数字要改?改成什么方向(大还是小)?

    💡 查看答案

    改两个 delay(500) 里的 500,往改——比如改成 100,灯就每秒闪 5 次。注意单位是毫秒:100 毫秒 = 0.1 秒。

  2. 如果想让两个灯交替闪(一个亮时另一个灭),loop() 里的四行该怎么改?改完翻回第二册第 8 章,看看 Python 版的改法是不是一个思路

    💡 查看答案

    让两个灯的电平始终相反

    cpp
    void loop() {
      digitalWrite(LED_ONBOARD, HIGH);  // 板载亮
      digitalWrite(LED_RED, LOW);       // 外接灭
      delay(500);
      digitalWrite(LED_ONBOARD, LOW);   // 板载灭
      digitalWrite(LED_RED, HIGH);      // 外接亮
      delay(500);
    }

    和第二册 Python 版的思路一模一样——逻辑相同,只是换了语言。

不积跬步,无以至千里;万里之行,始于当下。