Arduino串口通信全面讲解

1.串口配置

Serial.begin(speed)、Serial.begin(speed, config)函数对串口进行初始化配置

speed:波特率,300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200

config:数据位、校验位、停止位配置,配置选项如下表

config可选配置数据位校验位停止位
SERIAL_5N151
SERIAL_6N161
SERIAL_7N171
SERIAL_8N1(默认配置)81
SERIAL_5N252
SERIAL_6N262
SERIAL_7N272
SERIAL_8N282
SERIAL_5E151
SERIAL_6E161
SERIAL_7E171
SERIAL_8E181
SERIAL_5E252
SERIAL_6E262
SERIAL_7E272
SERIAL_8E282
SERIAL_5O151
SERIAL_6O161
SERIAL_7O171
SERIAL_8O181
SERIAL_5O252
SERIAL_6O262
SERIAL_7O272
SERIAL_8O282

2.串口相关函数

2.1输入输出函数

  • 输入函数:Serial.read(),每次都会返回一个字节的数据,这个返回值便是当前串口读取到的数据。

  • 输出函数:Serial.print(val) 或Serial.println(val)可以向串口发送数据,println在发送完数据后,在发送一组回车换行符 

void setup() {
  // 初始化串口
  Serial.begin(9600);
}

void loop() {
  // 读取输入的信息
  char ch=Serial.read();
  // 输出信息
  Serial.print(ch);
  delay(1000); 
}

2.2其它函数

函数名描述参数返回

available()

获取串口接收到的数据个数,即获取串口接收缓冲区的字节数,缓冲区最多保存64bytes的数据可读取的字节数
end()结束串口通信
find(target)从缓冲区读取数据,直到读取到指定的字符串

target:字符或字符串

Boolean型:
True:找到
False:没有找到
findUntil(target, terminal)从缓冲区读取数据,直到读取到指定的字符串或停止符target : 需要搜索的字符串或字符
terminal : 停止符
bool
flush()等待正在发送的数据发送完成
parseFloat()从缓冲区返回第一个float型有效数据float型数据
parseInt()从缓冲区返回第一个intt型有效数据int型数据
peek()从缓冲区返回一个字节数据,但是与read()不同的是,peek读取数据后不会在缓冲区删除改数据

进入接受缓冲区的第一个字节的数据;如果没有可读数据,则返回-1

readBytes(buffer, length)从接收缓冲区读取指定长度的字符,并存储到数组中buffer: 用于存储数据的数组(char[]或者byte[])
length : 需要读取的字符长度

读到的字节数;如果没有接收到有效的数据,则返回0。

readBytesUntil(character, buffer, length)从接收缓冲区读取指定长度的字符,并存储到数组中。如果读取到停止位或者超时,将退出此函数character : 停止符
buffer: 用于存储数据的数组( char[] 或者byte[] )
length : 需要读取的字符长度

读到的字节数;如果没有接收到有效的数据,则返回0。

setTimeout(time)

用于设置Serial.readBytesUntil() 和Serial.readBytes() 的等待串口数据时间。

time:超时时间,单位毫秒

Serial.write(val)
Serial.write(str)
Serial.write(buf, len)
以字节的形式输出数据到串口val: 发送的数据
str: string型的数据
buf: 数组型的数据
len: 缓冲区的长度

输出的字节数

3.软串口

软串口需要先声明SoftwareSerial.h头文件,使用SoftwareSerial(rxPin, txPin)定义一个对象,rxPin和txPin为引脚编号,该对象的很多函数与硬件串口类似。

listen()

开启软串口监听状态。 Arduino Uno在同一时间仅能监听一个软串口,当你需要监听某一软串口时,需要该对象调用这个函数开启监听功能。 语法: mySerial.listen() 参数: mySerial:用户自定义的软件串口对象 返回值: 无

isListening()

监测软串口是否正在监听状态。 语法: mySerial.isListening() 参数: mySerial:用户自定义的软件串口对象 返回值: Boolean型 True:正在监听 False:没有监听

end()

停止监听软串口。 语法: mySerial. end() 参数: mySerial:用户自定义的软件串口对象 返回值: Boolean型 True:关闭监听成功 False:关闭监听失败

overflow()

检测缓冲区是否溢出。 语法: mySerial.overflow() 参数: mySerial:用户自定义的软件串口对象 返回值: Boolean型 True:溢出 False:没有溢出

示例程序

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

void setup()
{
  Serial.begin(115200);
  while (!Serial) {
  }

  Serial.println("Goodnight moon!");

  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

 

  • 12
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Arduino串口通信是一种常见的通信方式,可以实现Arduino和其他设备或计算机之间的数据交换。以下是基本的Arduino串口通信示例代码: 发送数据: ```C++ void setup() { Serial.begin(9600); // 初始化串口通信,设置波特率为9600 } void loop() { Serial.println("Hello world!"); // 发送数据 delay(1000); // 延时1秒 } ``` 接收数据: ```C++ void setup() { Serial.begin(9600); // 初始化串口通信,设置波特率为9600 } void loop() { if (Serial.available() > 0) { // 判断是否有数据可读 char data = Serial.read(); // 读取数据 Serial.println(data); // 输出数据 } } ``` 这些代码将在串口上发送“Hello world!”并在接收到数据时输出它。你可以使用Serial.print()函数发送数字、字符串等其他类型的数据。同时,也可以使用Serial.write()函数发送二进制数据。 当你与其他设备通信时,需要确保使用相同的波特率、数据位、校验位和停止位等参数。 ### 回答2: Arduino串口通信是指利用Arduino主控板的串口通信功能,与其他设备或电脑之间进行数据传输的过程。Arduino主控板通常拥有一个或多个串口接口,可以通过这些接口连接到其他串口设备,如电脑、传感器、显示屏等。 首先,我们需要了解Arduino串口通信的原理。Arduino主控板通过串口与其他设备进行数据传输,其中一个串口引脚用于发送数据(TX),另一个串口引脚用于接收数据(RX)。在通信过程中,我们需要设定串口的波特率(即数据传输速度)以确保数据的准确传输。 在Arduino编程中,我们可以使用Serial库来实现串口通信。首先,我们需要在程序的开头使用“Serial.begin()”函数来初始化串口,并设定波特率。接下来,我们可以使用“Serial.print()”或“Serial.println()”函数将数据发送到串口,或者使用“Serial.read()”函数从串口接收数据。 在与其他设备进行串口通信时,我们需要将Arduino串口引脚与对应设备的串口引脚连接。例如,如果要与电脑进行串口通信,可以使用USB线将Arduino板连接到电脑,并选择正确的串口端口和波特率。然后,可以使用Arduino串口监视器工具来接收和发送数据。 除了与电脑进行串口通信Arduino还可以与各种串口设备进行通信,如传感器、无线模块、显示屏等。通过串口通信Arduino可以接收传感器的数据并进行处理,或者控制其他设备的运行。 总之,Arduino串口通信是一种实现Arduino主控板与其他设备之间数据传输的方式,通过设置波特率、使用Serial库以及与其他设备连接,可以实现双向数据的传输和通信。这使得Arduino在各种物联网和嵌入式系统应用中具有广泛的应用价值。 ### 回答3: Arduino是一种开源的微控制器平台,通常用于制作各种交互式项目。其中一个常见的应用就是通过串口通信与其他设备或计算机进行通信。 通过Arduino与其他设备或计算机之间进行串口通信,可以实现很多有趣的功能。 首先,Arduino板上有多个数字和模拟输入输出引脚,可以连接各种传感器、执行器或其他外部设备。通过串口通信,可以将从传感器获取的数据发送到计算机,进行数据分析、可视化或其他处理。 其次,通过串口通信,可以将计算机中的数据发送到Arduino,控制外部设备的状态或执行特定的行为。比如,可以通过串口发送控制命令,控制LED灯的亮度,驱动电机运动,或者根据计算机中的数据指令播放不同的声音。 此外,利用串口通信,还可以实现Arduino与其他Arduino或单片机之间的通信。通过串口可以将不同Arduino板之间的数据进行传输和共享,实现更复杂的功能。 Arduino通过内置的串口通信模块,支持多种常见的串口通信协议,例如RS232、RS485和UART等。不同的协议有不同的通信速率和传输距离,需要根据具体的应用需求选择合适的通信方式。 总结来说,Arduino串口通信是非常重要的一种功能,它使Arduino能够与其他设备或计算机进行通信,实现数据传输、远程控制、协同工作等功能,拓展了Arduino的应用范围,可以应用于各种有趣的项目和创意。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值