简介
欢迎来到 串口控制 LED 项目!在本教程中,你将学习如何通过串口监视器发送简单指令,来控制连接到 Arduino Uno 的 LED。这是一个经典的入门项目,融合了两个基本概念:USART(通用同步/异步收发器) 通信和 GPIO(通用输入/输出) 输出。最终,你将能够通过在串口监视器中输入 “1” 或 “0” 来打开或关闭 LED,甚至可以通过输入 ”?” 查询 LED 的状态。
我们将使用 Velxio——一个基于浏览器的电路和微控制器模拟器,支持 SPICE 精度的模拟仿真。无需硬件,只需你的浏览器!让我们开始吧。
电路讲解

这个电路非常简单。你只需要两个元件:
- Arduino Uno(大脑)
- 绿色 LED(输出设备)
接线详情
- LED 阳极(长引脚,A 引脚) 通过绿色导线(
#00cc00)连接到 Arduino 的 13 号引脚。 - LED 阴极(短引脚,C 引脚) 通过黑色导线(
#000000)连接到 Arduino 的 GND。
就是这样!不需要电阻,因为 Arduino Uno 的 13 号引脚板上已经内置了限流电阻。在实际电路中,你需要串联一个 220Ω 的电阻,但在模拟中,这样已经完美运行。
如何在 Velxio 中搭建
- 在 Velxio 中打开 串口控制 LED 示例。
- 你会看到 Arduino Uno 和 LED 已经放置在画布上。如果你想从头搭建,可以使用 元件选择器(如下所示)来添加 Arduino Uno 和 LED。

- 点击 Arduino Uno 选中它,然后点击 13 号引脚。拖拽一根导线到 LED 的阳极(A 引脚)。
- 同样,将 LED 的阴极(C 引脚)连接到 Arduino 的任意 GND 引脚。
- 使用 画布工具栏 进行缩放和平移,以获得更好的视角。

代码讲解

现在让我们来看看实现这一切的代码。在 Velxio 中打开代码编辑器(你会看到带有语法高亮的 Monaco 编辑器)。
// Serial LED Control
// Send "1" to turn LED ON, "0" to turn LED OFF.
// Demonstrates Serial input controlling hardware.
const int LED_PIN = 13;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.println("=========================");
Serial.println(" Serial LED Controller");
Serial.println("=========================");
Serial.println("Send '1' = LED ON");
Serial.println("Send '0' = LED OFF");
Serial.println("Send '?' = Status");
Serial.println();
}
bool ledState = false;
void loop() {
if (Serial.available() > 0) {
char cmd = Serial.read();
switch (cmd) {
case '1':
digitalWrite(LED_PIN, HIGH);
ledState = true;
Serial.println("[OK] LED is ON");
break;
case '0':
digitalWrite(LED_PIN, LOW);
ledState = false;
Serial.println("[OK] LED is OFF");
break;
case '?':
Serial.print("[STATUS] LED is ");
Serial.println(ledState ? "ON" : "OFF");
Serial.print("[STATUS] Uptime: ");
Serial.print(millis() / 1000);
Serial.println("s");
break;
default:
if (cmd >= 32) { // ignore control chars
Serial.print("[ERR] Unknown command: '");
Serial.print(cmd);
Serial.println("' (use 1, 0, or ?)");
}
break;
}
}
}
工作原理
const int LED_PIN = 13;– 我们将 LED 引脚定义为 13(Arduino Uno 上的内置 LED 引脚)。setup()– 初始化串口通信,波特率为 9600,将 LED 引脚设置为输出模式,并打印欢迎信息。loop()– 检查串口是否有数据可用。如果有,则读取一个字符,并通过switch语句进行处理。'1':打开 LED(digitalWrite(LED_PIN, HIGH))并更新ledState。'0':关闭 LED(digitalWrite(LED_PIN, LOW))。'?':打印当前 LED 状态和系统运行时间(秒)。- 其他可打印字符则打印错误信息。
运行模拟
- 点击编辑器工具栏中的 运行 按钮。

- 打开串口监视器(通常是工具栏中的一个按钮或一个独立面板)。
- 输入
1并按回车——绿色 LED 应该会亮起。 - 输入
0——LED 熄灭。 - 输入
?——你会看到状态和运行时间。
学生需掌握的关键概念
本项目教授了几个重要概念:
- 串口通信:Arduino 通过 USART 与计算机通信。
Serial.begin(9600)设置波特率(每秒位数)。 - GPIO 输出:
pinMode()和digitalWrite()用于控制数字引脚。 - 状态变量:
ledState跟踪 LED 的当前状态,使状态查询命令能够工作。 - 输入解析:从串口读取字符,并使用
switch处理指令。 - 错误处理:
default分支捕获无效输入并提供反馈。
常见问题与调试技巧
- 串口监视器没有输出? 确保波特率匹配(9600)。另外,确保你点击了串口监视器的连接按钮。
- LED 没有响应? 检查 LED 接线是否正确:阳极接 13 号引脚,阴极接 GND。在 Velxio 中,导线有颜色编码,请验证连接。
- 指令不起作用? 代码会忽略非打印字符(ASCII < 32)。如果你发送换行符,它们会被忽略。请使用串口监视器的“无行尾”选项,或只发送字符本身。
- 发送了多个字符? 代码一次只读取一个字符。如果你发送 “10”,它会在不同的循环迭代中先处理 ‘1’,再处理 ‘0’。
建议的扩展练习
掌握本项目后,可以尝试以下改进:
- 添加第二个 LED 到 12 号引脚,并用 ‘2’ 和 ‘3’ 这样的指令控制它。
- 使用 PWM 控制亮度:发送 0 到 255 之间的数字,通过
analogWrite()设置 LED 亮度。 - 添加一个按钮 作为输入:读取数字引脚,按下时切换 LED 状态。
- 实现一个指令解析器,使其能够接受像 “ON” 或 “OFF” 这样的字符串,而不是单个字符。
- 记录数据 到串口监视器:打印传感器读数或时间戳。
结论
你已经成功构建了一个简单但功能强大的串口 LED 控制器!这个项目是无数物联网和自动化项目的基础,在这些项目中,你可以通过文本指令控制硬件。Velxio 让你无需任何物理元件就能轻松进行实验。
准备好亲自尝试了吗?在 Velxio 中打开 串口控制 LED 示例,运行模拟,开始发送指令吧。祝你玩得开心!