Arduino入门教程五|串口通信详解(3个实验+if条件判断,保姆级入门) 我整理了一套Arduino零基础 从入门到高级 完整系统课程包含视频讲解、全套源码、接线图纸、库文件、ESP32/ESP32-S3 摄像头 物联网实战项目循序渐进新手也能零基础吃透。需要系统学习可以查看我主页专属课程零基础保姆级Arduino教程从入门到实战_在线视频教程-CSDN程序员研修院。串口通信是Arduino与计算机交互的核心方式也是后续学习传感器数据读取、设备控制的基础——通过串口我们可以让Arduino向电脑发送信息、接收电脑指令实现“双向对话”。本文从零拆解串口通信的原理、核心函数、实操实验结合if条件判断的用法完成3个课堂实验和1个课后练习全程保姆级讲解纯新手也能轻松上手吃透Arduino与计算机的通信逻辑。先明确核心目标理解串行通信的基本原理掌握Arduino串口相关函数Serial.begin()、Serial.print()、Serial.read()等的使用学会用if条件判断处理串口指令能独立完成串口输出、数据回显、LED控制3个实验以及亮度调节的课后练习。一、实验准备硬件清单本次实验以“软件实操基础硬件”为主无需复杂器件新手可直接对照准备重点确保Arduino与电脑正常连接Arduino UNO控制器 × 1LED灯 × 1用于实验三及课后练习220Ω限流电阻 × 1保护LED灯避免烧毁面包板 × 1杜邦线公对公、公对母若干USB数据线 × 1连接Arduino与电脑用于供电和串口通信补充说明实验一、实验二仅需Arduino和USB数据线无需额外硬件实验三及课后练习需用到LED灯和电阻按常规LED连接方式准备即可后续会详细拆解连接步骤。二、核心知识点解析重点必吃透串口通信的核心是“理解通信原理掌握核心函数学会条件判断”本文用通俗的语言拆解拒绝晦涩新手重点掌握以下4点为实操打基础。1.串行通信基础串行通信的定义和核心约定这是理解串口通信的前提串行通信的定义使用一条数据线将数据一位一位地依次传输区别于“多条数据线同时传输”的并行通信Arduino与电脑的通信采用串行通信简洁且稳定。通信的两个核心约定必须遵守否则通信失败通信速率一致即波特率一致Arduino UNO与电脑串口通信默认使用9600的波特率后续实验均采用此波特率波特率是指单位时间内传输的信息量决定了通信的快慢。字符编码一致默认使用ASCII码ASCII码是字符与二进制的对应关系比如字符’a’对应二进制01100001、十进制97字符’b’对应二进制01100010、十进制98电脑与Arduino通过ASCII码识别传输的字符。Arduino串口引脚Arduino UNO的串口引脚分为发送TX1号引脚和接收RX0号引脚TX负责向电脑发送数据RX负责接收电脑发送的数据实操中无需手动连接这两个引脚USB数据线会自动实现数据传输。2.串口核心函数实验核心本文详细介绍了4个串口核心函数分别对应串口初始化、输出、输入和缓存区查询每个函数的用法和注意事项如下新手需牢记并灵活运用函数名称功能说明语法格式注意事项Serial.begin()初始化串口通信设置波特率Serial.begin(波特率);必须在setup()函数中调用实验中固定写Serial.begin(9600);Serial.print()串口输出数据输出后不换行Serial.print(值);可输出字符串用双引号、字符用单引号、变量值直接写变量名Serial.println()串口输出数据输出后自动换行Serial.println(值);用法与Serial.print()一致区别在于自动换行适合分条输出数据Serial.read()读取串口缓存区的数据一次读一个字符变量名 Serial.read();返回值为整数类型有可读数据时返回对应ASCII码值无数据时返回-1读完后会删除已读数据Serial.available()查询串口缓存区的可读字节数Serial.available();返回值为整数常用在if条件中判断是否有串口数据传入如Serial.available() 0表示有数据3. if条件判断本文详细讲解了if函数的语法和执行逻辑这是处理串口指令如“发送’a’点亮LED”的核心新手需掌握其两种基本格式和执行流程if函数的核心作用根据条件表达式的“真”或“假”执行不同的语句块实现“分支控制”比如判断串口接收的是’a’还是’b’执行不同的LED控制逻辑。两种基本格式单分支格式只有条件为真时执行if (条件表达式) { // 语句块条件为真时执行 }双分支格式条件为真、为假时分别执行if (条件表达式) { // 语句块1条件为真时执行 } else { // 语句块2条件为假时执行 }执行流程先判断条件表达式的真假若为真true执行对应语句块若为假false则跳过单分支的语句块或执行双分支的else语句块之后执行下一条语句。实验应用结合Serial.read()读取的串口数据用if函数判断数据内容实现“接收不同指令执行不同操作”比如接收’a’点亮LED接收’b’关闭LED。三、课堂实验3个实验循序渐进按照课堂实验顺序从简单的串口输出到数据回显再到串口控制LED循序渐进每一步都有详细步骤和代码解析新手可跟着一步步实操巩固串口函数和if判断的用法。实验一串口输出“行号:Hello world!”每隔1秒核心目标掌握Serial.begin()、Serial.print()、Serial.println()的用法实现Arduino向电脑串口监视器输出指定内容学会用变量实现行号递增。1.实验步骤无需额外硬件将Arduino UNO通过USB数据线连接到电脑打开Arduino IDE新建空白项目。编写程序含详细注释复制到IDE中。选择正确的板型Arduino UNO和端口上传程序。打开串口监视器IDE右上角图标设置波特率为9600点击“打开”观察输出效果。2.完整代码cpp//定义行号变量初始值为1int lineNum 1;void setup() {// 初始化串口通信波特率9600必须写在setup()中Serial.begin(9600);}void loop() {// 输出行号和Hello world!Serial.print()不换行Serial.println()换行Serial.print(行号:);Serial.print(lineNum);Serial.println(:Hello world!);lineNum; // 行号自增1每次循环加1delay(1000); // 每隔1秒输出一次}3.实验效果与解析实验效果串口监视器中每隔1秒会输出一行内容行号从1开始递增格式为“行号:1:Hello world!”“行号:2:Hello world!”以此类推。代码解析用变量lineNum记录行号每次循环后自增Serial.print()用于拼接行号和字符串Serial.println()实现换行delay(1000)控制输出间隔为1秒完美贴合原文件实验要求。实验二串口数据回显接收电脑指令原样返回核心目标掌握Serial.read()和Serial.available()的用法实现Arduino接收电脑发送的串口数据并原样回显到串口监视器中理解串口双向通信的逻辑。1.实验步骤无需额外硬件保持Arduino与电脑的连接新建空白项目编写程序。上传程序后打开串口监视器设置波特率9600选择“发送新行”。在串口监视器的输入框中输入任意字符如a、abc、123点击“发送”观察回显效果。2.完整代码cppvoid setup() {//初始化串口通信波特率9600Serial.begin(9600);// 输出提示信息告知用户可发送数据Serial.println(请输入数据将为您回显);}void loop() {// 判断串口缓存区是否有可读数据Serial.available() 0表示有数据if (Serial.available() 0) {// 读取串口数据保存到变量中char类型匹配字符数据char data Serial.read();// 回显数据拼接提示信息让输出更清晰Serial.print(您发送的是);Serial.println(data);}}3.实验效果与解析实验效果在串口监视器输入框中发送任意字符如’a’会立即回显“您发送的是a”发送字符串如“abc”会分三次回显每次读取一个字符符合Serial.read()“一次读一个字符”的特性。代码解析用Serial.available()判断是否有数据传入避免无数据时读取到-1将读取到的数据保存为char类型匹配ASCII字符确保回显准确添加提示信息提升实操体验。实验三串口指令控制LED灯发送’a’点亮’b’关闭核心目标结合if条件判断实现“串口发送指令→Arduino接收指令→控制LED”的完整流程巩固串口输入函数和if函数的用法实现双向交互。1.硬件连接步骤将Arduino UNO通过USB数据线连接电脑暂时不供电。在面包板上插入LED灯区分正负极长脚正极短脚负极。LED正极串联220Ω限流电阻电阻另一端连接到Arduino的13号引脚板载LED对应引脚也可选用其他数字引脚。LED负极用杜邦线连接到Arduino的GND引脚形成完整回路检查连接无误后供电。2.完整代码cpp//定义LED连接的引脚13号引脚与硬件连接对应const int ledPin 13;void setup() {// 初始化串口通信波特率9600Serial.begin(9600);// 初始化LED引脚为输出模式pinMode(ledPin, OUTPUT);// 输出提示信息告知用户操作指令Serial.println(请发送指令a点亮LEDb关闭LED);}void loop() {// 判断是否有串口数据传入if (Serial.available() 0) {// 读取串口指令保存为char类型char cmd Serial.read();// 用if双分支判断指令执行对应操作if (cmd a) {digitalWrite(ledPin, HIGH); // 发送a点亮LEDSerial.println(指令接收成功LED已点亮);} else if (cmd b) {digitalWrite(ledPin, LOW); // 发送b关闭LEDSerial.println(指令接收成功LED已关闭);} else {// 接收未知指令提示用户输入正确指令Serial.println(指令错误请发送a或b);}}}3.实验效果与解析实验效果打开串口监视器发送’a’LED灯点亮同时回显“指令接收成功LED已点亮”发送’b’LED灯熄灭回显“指令接收成功LED已关闭”发送其他字符回显指令错误提示。代码解析结合Serial.available()和Serial.read()读取串口指令用if-else if-else判断指令内容实现不同的LED控制逻辑添加提示信息方便用户操作同时排查未知指令的情况贴合实验要求也符合if函数的分支控制逻辑。四、实验调试与常见问题排查结合本文知识点和实操经验整理了4个新手常遇问题及解决方法帮你快速排查故障顺利完成所有实验问题1串口监视器无输出—— 检查Serial.begin()是否在setup()函数中调用波特率是否设置为9600确认Arduino板型和端口选择正确程序上传成功检查USB数据线连接牢固无接触不良。问题2串口回显异常如乱码—— 确保Arduino与串口监视器的波特率一致均为9600检查字符编码是否为默认的ASCII码避免选择其他编码格式若仍乱码重启IDE和Arduino板。问题3LED不响应串口指令—— 检查LED硬件连接是否正确正负极、电阻选型确认代码中LED引脚与实际连接一致检查if条件判断中的字符是否用单引号如’a’而非a避免语法错误。问题4Serial.read()读取不到数据—— 确保串口监视器设置为“发送新行”用Serial.available()判断有数据后再读取避免无数据时读取到-1检查串口缓存区是否有残留数据可在读取前添加Serial.flush()清空缓存。五、课后练习巩固提升掌握3个课堂实验后可尝试课后练习巩固串口通信、if条件判断和LED亮度控制的用法进一步提升实操能力和代码编写能力练习要求编写程序使用计算机发送字符指令控制Arduino上LED灯的亮度具体指令发送’a’LED亮度为50%发送’b’LED亮度为100%发送’c’关闭LED亮度为0%。1.练习思路核心逻辑复用实验三的硬件连接结合analogWrite()函数PWM信号控制LED亮度用if条件判断处理串口指令匹配不同的亮度值。亮度对应LED亮度50%对应analogWrite()函数值1270~255的中间值100%对应2550%对应0PWM引脚选用带“~”的引脚如9、10、11号若用13号引脚非PWM需更换引脚。指令处理用Serial.read()读取串口指令通过if-else if判断指令’a’、’b’、’c’执行对应的亮度控制逻辑同时回显指令执行结果。2.练习完整代码含注释可直接复制cpp//定义LED连接的PWM引脚选用9号引脚带“~”支持亮度调节const int ledPin 9;void setup() {// 初始化串口通信波特率9600Serial.begin(9600);// 初始化LED引脚为输出模式pinMode(ledPin, OUTPUT);// 输出提示信息告知用户操作指令Serial.println(请发送指令);Serial.println(a - LED亮度50%);Serial.println(b - LED亮度100%);Serial.println(c - 关闭LED);}void loop() {// 判断是否有串口数据传入if (Serial.available() 0) {char cmd Serial.read(); // 读取串口指令// 用if-else if判断指令控制LED亮度if (cmd a) {analogWrite(ledPin, 127); // 50%亮度值为127Serial.println(指令接收成功LED亮度50%);} else if (cmd b) {analogWrite(ledPin, 255); // 100%亮度值为255Serial.println(指令接收成功LED亮度100%);} else if (cmd c) {analogWrite(ledPin, 0); // 关闭LED亮度0%Serial.println(指令接收成功LED已关闭);} else {Serial.println(指令错误请发送a、b或c);}}}提示代码中选用9号PWM引脚若硬件连接时使用其他PWM引脚对应修改ledPin的值即可analogWrite()函数的取值范围为0~255完美匹配LED亮度的0%~100%与课后练习要求完全一致也参考了串口控制LED亮度的常规实现方式。六、总结本次Arduino串口通信实验核心是吃透三个关键点串行通信的基本约定波特率、ASCII码、串口核心函数的使用、if条件判断的分支控制。通过3个课堂实验从简单的串口输出到数据回显再到串口控制LED循序渐进地掌握了Arduino与计算机的双向通信逻辑这是后续学习更复杂项目如传感器数据上传、电脑控制机器人的基础。对于新手来说实操中重点注意串口初始化必须在setup()函数中波特率要与串口监视器一致Serial.read()一次读取一个字符需配合Serial.available()判断数据是否存在if条件判断中字符指令需用单引号避免语法错误。串口通信的核心价值的是“交互”——让Arduino不再是孤立的硬件而是能与电脑沟通、接收指令、反馈信息的“智能设备”。后续可以尝试拓展更多功能比如通过串口上传传感器数据、用电脑发送指令控制多个LED灯逐步夯实基础解锁更多Arduino的创意玩法。如果在实操中遇到问题欢迎在评论区留言交流关注我后续会分享更多Arduino初级实战项目跟着博主的教学节奏从入门到进阶逐步吃透Arduino编程与硬件控制 核心要点回顾串口核心约定波特率9600字符编码ASCII码通信双方必须一致核心函数Serial.begin()初始化、Serial.print()/println()输出、Serial.read()输入、Serial.available()查询缓存if判断两种格式单分支、双分支用于处理串口指令实现分支控制实操重点3个课堂实验循序渐进课后练习巩固亮度控制无需复杂硬件直接上手。