Arduino串口通信全面讲解_arduino串口配置-程序员宅基地

技术标签: arduino  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_5N1 5 1
SERIAL_6N1 6 1
SERIAL_7N1 7 1
SERIAL_8N1(默认配置) 8 1
SERIAL_5N2 5 2
SERIAL_6N2 6 2
SERIAL_7N2 7 2
SERIAL_8N2 8 2
SERIAL_5E1 5 1
SERIAL_6E1 6 1
SERIAL_7E1 7 1
SERIAL_8E1 8 1
SERIAL_5E2 5 2
SERIAL_6E2 6 2
SERIAL_7E2 7 2
SERIAL_8E2 8 2
SERIAL_5O1 5 1
SERIAL_6O1 6 1
SERIAL_7O1 7 1
SERIAL_8O1 8 1
SERIAL_5O2 5 2
SERIAL_6O2 6 2
SERIAL_7O2 7 2
SERIAL_8O2 8 2

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());
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wwh219/article/details/109074190

智能推荐

buck dcm占空比计算_一看就会!这位牛人把MOS开关损耗计算写神了-程序员宅基地

文章浏览阅读643次。电源工程师们都知道开关MOS在整个电源系统里面的损耗占比是不小的,我们谈及最多的就是开通损耗和关断损耗,由于这两个损耗不像导通损耗或驱动损耗一样那么直观,所以有部分人对于它计算还有些迷茫。今天我们就来详细分析计算一下开关损耗,并论述实际状态下功率MOSFET的开通过程和自然零电压关断的过程,从而使电子工程师知道哪个参数起主导作用并更加深入理解MOSFET。MOSFET开关损耗1、开通过程..._buck电路电感和开关管损耗占比

cocos2dx——裁剪节点ClippingNode-程序员宅基地

文章浏览阅读77次。【唠叨】 学习cocos2dx 3.2确实比较吃力,因为网上关于最新版的v3.2的资料十分稀少,或者是讲解的确实不是很详细。大部分人都是根据官方文档照样画瓢,而对于有些比较抽象的概念及函数都是照着官方文档来讲解的。这样的结果,导致有些东西令我确实非常费解。没有办法,只好自己来总结cocos2dx3.2,然后将个人的学习感悟分享给大家。PS:当然有些大牛写的文章还是..._clippingnode 性能

Viper炫彩蛇的下载与安装(MSF图形化界面)_简易极速安装版-程序员宅基地

文章浏览阅读647次,点赞2次,收藏2次。1.更新apt-get2.下载docker.ioY。_炫彩蛇

CVPR2021|| Coordinate Attention注意力机制_位置注意力机制-程序员宅基地

文章浏览阅读2.4w次,点赞63次,收藏418次。Paper:https://arxiv.org/pdf/2103.02907.pdfGitHub:https://github.com/Andrew-Qibin/CoordAttention轻量,优秀,好用!讲之前我们先回顾一下以前的SE与CBAMSESE比较简单,看一下结构图差不多就能理解了,如果有些实现不太懂的,可以借鉴一下CBAM的。但SE只考虑内部通道信息而忽略了位置信息的重要性,而视觉中目标的空间结构是很重要的。CBAM稍微介绍一下CBAM,如图b所示,CBAM包含空间注意力和通_位置注意力机制

eslint搭配prettier使用步骤_plugin:prettier/recommended-程序员宅基地

文章浏览阅读1.2k次。这里的执行逻辑顺序是:eslint会首先读extends的规则,这个时候遇到了最后配置的plugin:prettier/recommended,而这个插件又会先读本地配置的.prettierrc文件再读取prettier自己内部设置的配置,最后读.eslintrc.json的rules配置。2、其次配置.eslintrc.json文件,extends: [“plugin:prettier/recommended”],如果有其他扩展,则"plugin:prettier/recommended"放在最后。_plugin:prettier/recommended

kettle 共享数据库连接时带汉字引发的错误-程序员宅基地

文章浏览阅读548次。处理方式:在目录: C:\Users\Administrator\.kettle 里 找到:shared.xml 把该文件的编码方式改为UTF-8,重启kettle就没问题了

随便推点

HDOJ 2544 BellmanFord实现-程序员宅基地

文章浏览阅读69次。1 #include <cstdio> 2 3 struct road{ 4 int head; 5 int tail; 6 int value; 7 }; 8 9 #define Infinity 23333333310 11 int main(){12 int n, m;13 ...

大数据Hadoop复习笔记_燕山大学大数据期末复习笔记-程序员宅基地

文章浏览阅读3.9k次,点赞14次,收藏39次。题型与分值选择题10道*2分=20分填空题5道*2分=10分判断题5道*1分=5分简答题2道*10分=20分方案设计题1道*15分=15分(无唯一标准答案,可用中文写清楚每个关键步骤和重要技术点,也可直接写代码,或者中文和代码混合说明)注意:①写清方案实行的步骤②每个步骤的重要技术点,比如用的哪个类来实现程序设计题6段*5分=30分(从挖行改成挖段)内容复习hive的JSON和多字节分隔符的解析步骤和关键技术点复习hive窗口函数的使用方法和含义集群与分布式分布式_燕山大学大数据期末复习笔记

java读取TXT文件类_readtxt.readfile java-程序员宅基地

文章浏览阅读431次。Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File();file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。通过这条线路读取甲方的信息:new FileInputStream(file)目前这个信息已经读进来内存当中了。接下来需要解读成乙方可以理解的东西既然你使用了FileInputStream(_readtxt.readfile java

天才ACM-程序员宅基地

文章浏览阅读446次,点赞11次,收藏7次。给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下:从集合 S 中取出 M 对数(即 2×M 个数,不能重复使用集合中的数,如果 S 中的整数不够 M 对,则取到不能取为止),使得“每对数的差的平方”之和最大,这个最大值就称为集合 S 的“校验值”。现在给定一个长度为 N 的数列 A 以及一个整数 T。我们要把 A 分成若干段,使得每一段的“校验值”都不超过 T。求最少需要分成几段。_天才acm

仅用5个线程,让Idea全系列Ide能看电视、直播、电影、听广播、音乐、美女图_bg-boom-程序员宅基地

文章浏览阅读7.6k次,点赞21次,收藏24次。今天要分享的技术方案是我在写bg-boom这款插件当中一小块的代码实现方案,先从需求说起吧,其模块整体的需求是丰富idea的背景功能,让背景支持电影、视频、直播、TV、广播、音乐、美女图等功能。_bg-boom

联想适合计算机专业的游戏本,全球最佳游戏笔记本电脑Top 10-程序员宅基地

文章浏览阅读751次。如果你告诉你的朋友你想买一台电脑,他们肯定会建议你买一台台式电脑。因为在相同的预算下,台式电脑可以比笔记本电脑带来更强大的性能。然而,在很多情况下,台式电脑的不可移动性会给游戏玩家带来很多麻烦,这并不像笔记本电脑那样方便。Origin EON15-X:桌面级的CPU造就一个无与伦比的游戏笔记本电脑处理器:4GHz英特尔酷睿i7-4790K;显卡:英伟达GeForce GTX 980 M (..._联想买什么电脑好,能玩游戏,办公软件