Arduino基础(二)——串口通讯

本文档介绍了如何在Arduino中进行串口通讯,包括RS-232与TTL协议转换,常用函数如Serial.begin(), Serial.print()等的详细说明。此外,还覆盖了基础实验操作和中断处理等内容。

目录:

 1,语言基础:https://blog.youkuaiyun.com/SumubeiFZ/article/details/118603957
2,串口通讯:https://blog.youkuaiyun.com/SumubeiFZ/article/details/118638228
3,基础实验操作:https://blog.youkuaiyun.com/SumubeiFZ/article/details/118638290
4,中断:https://blog.youkuaiyun.com/SumubeiFZ/article/details/118638320

一、 硬件串口

Arduino需要和其他设备相互通讯,而最常见最简单的方式就是串口通讯。
在PC机上最常见的串行通讯协议是RS-232串行协议,而各种微控制器(单片机)上采用的是TTL串行协议,两者电平不同,需要经过相应电平转换才能进行相互通讯。

二、相关函数介绍

1,Serial.begin()
描述:开启串口,通常置于setup()函数中。
原型:
Serial.begin(speed)
Serial.begin(speed, config)

参数:
speed:波特率,一般取值9600,115200等。
config:设置数据位、校验位和停止位。默认SERIAL_8N1表示8个数据位,无校验位,1个停止位。返回值:无。

2,Serial.end()
描述:禁止串口传输。此时串口Rx和Tx可以作为数字IO引脚使用。
原型:Serial.end()
参数:无。
返回值:无。

3,Serial.print()
描述:串口输出数据,写入字符数据到串口。
原型:
Serial.print(val)
Serial.print(val, format)

参数:
val:打印的值,任意数据类型。
config:输出的数据格式。BIN(二进制)、OCT(八进制)、DEC(十进制)、HEX(十六进制)。对于浮点数,此参数指定要使用的小数位数。
示例:

    Serial.print(78, BIN)          //得到 "1001110"
    Serial.print(78, OCT)          //得到 "116"
    Serial.print(78, DEC)          //得到 "78"
    Serial.print(78, HEX)          //得到 "4E"
    Serial.print(1.23456, 0)       //得到 "1"

    Serial.print(1.23456, 2)       //得到 "1.23"
    Serial.print(1.23456, 4)       //得到 "1.2346"

    Serial.print('N')              //得到 "N"
    Serial.print("Hello world.")   //得到 "Hello world."

返回值:返回写入的字节数。

4,Serial.available()
描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
原型:Serial.available()
参数:无。
返回值:可读取的字节数。

5,Serial.read()
描述:读取串口数据,一次读一个字符,读完后删除已读数据。
原型:Serial.read()
参数:无。
返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型。

6,Serial.readBytes()
描述:从串口读取指定长度的字符到缓存数组。
原型:Serial.readBytes(buffer, length)
参数:
buffer:缓存变量。
length:设定的读取长度。
返回值:返回存入缓存的字符数。

### Arduino 串口通讯教程 #### 1. 理解串口通信原理 Arduino 上的 USB 接口允许其与计算机建立连接并进行双向的数据交换。这种通信机制基于 UART (Universal Asynchronous Receiver/Transmitter),它能够发送和接收字节流。当通过 USB 连接到 PC 时,Arduino 实际上模拟了一个 COM 端口[^2]。 #### 2. 设置串口通信参数 为了确保正确无误的信息传递,在初始化阶段需设定波特率——即每秒传输的最大比特数。常用的速率有9600, 115200等。设置可以在 `setup()` 函数内完成: ```cpp void setup() { Serial.begin(9600); // 初始化串行通信,波特率为9600 bps } ``` #### 3. 发送数据到电脑或其他设备 一旦建立了有效的链接,就可以利用 `Serial.print()` 或者 `Serial.println()` 方法向主机端发送字符串或数值型变量的内容。例如: ```cpp int sensorValue = analogRead(A0); Serial.print("Sensor Value: "); Serial.println(sensorValue); ``` 上述代码片段会读取 A0 引脚处模拟信号并将结果连同标签一起传送给相连的机器。 #### 4. 接收来自外部源的消息 同样地,也可以监听是否有新的输入到达,并据此采取行动。下面的例子展示了如何处理接收到的文字命令: ```cpp if(Serial.available()>0){ char receivedChar=Serial.read(); switch(receivedChar){ case 'a': digitalWrite(LED_BUILTIN,HIGH); break; case 'b': digitalWrite(LED_BUILTIN,LOW); break; } } ``` 这段逻辑会在检测到来自PC 的'a'字符点亮内置LED;如果是'b',则熄灭之。 --- ### 常见问题及其解决方案 #### 无法识别 Arduino 板 如果操作系统未能成功枚举所连接的微控制器板,则可能是由于驱动程序缺失或是选择了错误的端口号所致。尝试更新最新版本的 CH340G 驱动(针对某些型号),并且仔细核对 Device Manager 中列出的具体编号是否匹配 IDE 内部配置选项里的选择[^1]。 #### 数据丢失或乱码现象 此类情况往往是因为双方协商好的波特率不一致引起的同步失败造成的。务必确认两端都采用了相同的传输速度规格。另外,过长的数据包可能导致缓冲区溢出从而引发异常状况,适当调整分组大小有助于缓解此难题。 #### 调试工具的选择 对于复杂的应用场景来说,仅依靠硬件本身提供的反馈可能不足以定位潜在缺陷所在位置。此时可以考虑引入第三方辅助手段如虚拟串口来捕获实际发生的交互过程以便分析排查。Configure Virtual Serial Port Driver 是一款实用的小工具,它可以成对生成仿真通道供开发者测试用途[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值