@TOArduino 串口通讯参考笔记 - Serial 类库及相关函数介绍 C

声明:

本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 saner686 及包含原文出处地址 https://editor.csdn.net/md?not_checkout=1&articleId=128343606

未经本人许可,所有文章均不得用于商业用途。

前言

Arduino板通过串口(称为UART或USART串口)与其它设备进行通讯。

所有Arduino板至少有一个串口,数字引脚位为 0(RX) 和1(TX)

Arduino Mega 有三个额外的 TTL串口如下:

Serial1:19(Rx) 和 18(Tx)
Serial2:17(Rx) 和 16(Tx)
Serial3:15(Rx) 和 14(Tx)
Arduino Due 有三个额外的3.3V TTL串口,额外串口引脚排布和 Arduino Mega 相同

Arduino Leonardo 串口 Serial1直接通过 TTL 5V 通讯,占用引脚 0(Rx)和 1(Tx)

Arduino 串口通讯会用到 Stream 这个类

Stream 类是二进制数据或者字符串数据流传输的基础类,不能被直接调用,但可以被继承。

许多库包含了 Stream 类,例如 Serial;Wire;Enternet Client;Enternet Setver;SD;这些都是很常用的重要类库

Stream 类

Stream 类 包含下列函数:

available()
read()
flush()
find()
findUntil()
peek()
readBytes()
readBytesUntil()
readString()
readStringUntil()
parseInt()
parseFloat()
setTimeout()
Stream 的这些函数 都会被 Serial 库继承。

available()
说明(Description):
  该函数 available() 获取数据流中接收到的字节数
返回值(Returns):
  返回值是 int 类型

read()
说明(Description):
  该函数 read() 获取数据流中第一个字节数据,获取数据后会清除当前字节数据,与peek()函数有区别
返回值(Returns):
  返回值是 读取数据字符的第一个字节(8bit)

flush()
说明(Description):
  该函数 flush() 清除数据流所有未向外发送的数据。
返回值(Returns):
  bool 类型

find()
说明(Description):
  该函数 find() 从数据流中查找目标字符串,找到目标字符串后返回值 = true,超时则返回值 = false
返回值(Returns):
  bool 类型

findUntil()
说明(Description):
  该函数 findUntil() 从数据流中读取目标字符串或者终止目标字符串,找到目标字符串后返回值 = true,超时则返回值 = false
语法(Syntax):
  stream.findUntil(target, terminal)
  target:要搜索的字符串
  terminal:终止目标字符串
返回值(Returns):
  bool 类型

peek()
说明(Description):
  该函数 peek() 从数据流中读取当前的一个字节,不会清除数据流中当前字节数据,与 read() 函数有区别。
返回值(Returns):
  当前缓存区数据流的第一个字节数据,如果缓存区无数据时返回 -1

readBytes()
说明(Description):
  该函数 readBytes() 从数据流中读取确定字节的数据到缓存区,读取确定长度数据或超时时终止
语法(Syntax):
  stream.readBytes(buffer, length)
  stream:从 Stream 类 继承的实例
  buffer:存放数据的缓存区(可以是 char[] 或 byte[] 这样的数组)
  length:存放的字节数
返回值(Returns):
  已经存放在缓存区中的字节数

readBytesUntil()
说明(Description):
  该函数 readBytesUntil() 从数据流中读取确定字节的数据到指定缓存地址,读取确定长度数据、或读取到终止字符、或超时时终止和 readBytes() 相比多了终止字符串
语法(Syntax):
  stream.readBytesUntil(character, buffer, length)
  stream:从 Stream 类 继承的实例
  character:终止字符(char 类型)
  buffer:存放数据的指定缓存地址(可以是 char[] 或 byte[] 这样的数组)
  length:存放的字节数(int 类型)
返回值(Returns):
  已经存放在缓存区中的字节数

readString()
说明(Description):
  该函数 readString() 从数据流中读取字符到字符串中,超时时终止
返回值(Returns):
  读取到的字符串(string)

readStringUntil()
说明(Description):
  该函数 readString() 从数据流中读取字符到字符串中,遇到终止字符,或超时时终止
语法(Syntax):
  stream.readString(terminator)
  terminator:终止字符
返回值(Returns):
  读取到的字符串(string)

parseInt()
说明(Description):
  该函数 parseInt() 从数据流中读取第一个 长整型数(long),
语法(Syntax):
返回值(Returns):
  长整型(long)

parseFloat()
说明(Description):
  该函数 parseInt() 从数据流中读取第一个有效的浮点数(float),
语法(Syntax):
  stream.parseFloat(list)
  list:检查的数据流
返回值(Returns):
  浮点数(float)

setTimeout()
说明(Description):
  该函数 setTimeout() 设置等待数据流通讯超时时间,毫秒为单位
语法(Syntax):
  stream.setTimeout(time)
  time:毫秒为单位的时间,长整型(long)

Serial 类

Serial 类 用于对串口数据流的读写。
Serial 继承 Stream 类,继承的函数方法参考 Stream 类;同时增加了几个新的函数,所有方法如下:

if (Serial)  
available()
availableForWrite()
begin()
end()
find()
findUntil()
flush()
parseFloat()
parseInt()
peek()
print()
println()
read()
readBytes()
readBytesUntil()
readString()
readStringUntil()
setTimeout()
write()
serialEvent()

begin()
说明(Description):
  该函数 begin() 设置串口数据传输的波特率。
语法(Syntax):
  Serial.begin(speed)
  Serial.begin(speed, config)
Arduino Mega Only:
  Serial1.begin(speed)
  Serial2.begin(speed)
  Serial3.begin(speed)
  Serial1.begin(speed, config)
  Serial2.begin(speed, config)
  Serial3.begin(speed, config)
  speed:波特率 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200
  config:通讯格式 5N1, 6N1, 7N1, 8N1(默认), 5N2, 6N2, 7N2, 8N2, 5E1, 6E1, 7E1, 8E1, 5E2, 6E2, 7E2, 8E2, 5O1, 6O1, 7O1, 8O1, 5O2, 6O2, 7O2, 8O2,
返回值(Returns):
  nothing 无

end()
说明(Description):
  该函数 end() 禁用串口。禁用串口后,原串口所占用引脚被当做一般输入输出使用。
语法(Syntax):
  Serial.end()
返回值(Returns):
  nothing 无

print()
说明(Description):
  该函数 print() 将数据流通过串口以 ASCII 文本形式输出输出。
例子:
Serial.print(78) gives “78”  以 ASCII 码形式以此输出 “7” 和 “8”
Serial.print(1.23456) gives “1.23”  浮点数默认只输出小数点后两位
Serial.print(‘N’) gives “N” 
Serial.print(“Hello world.”) gives “Hello world.”
Serial.print(78, BIN) gives “1001110”
Serial.print(78, OCT) gives “116”
Serial.print(78, DEC) gives “78”
Serial.print(78, HEX) gives “4E”
Serial.print(1.23456, 0) gives “1”
Serial.println(1.23456, 2) gives “1.23”
Serial.println(1.23456, 4) gives “1.2346”
语法(Syntax):
  Serial.print(val)
  Serial.print(val, format)
  val:需要输出的值,支持任何类型数据
  format:指定数据格式
返回值(Returns):
  返回 print() 函数输出的字符数据个数,长整型(long)

println()
说明(Description):
  该函数 println() 将数据流通过串口以 ASCII 文本形式输出输出,并且在结尾输出换行符 (ASCII 13, 即 ‘\r’) 。
  参考 print() 函数
语法(Syntax):
  Serial.println(val)
  Serial.println(val, format)
  val:需要输出的值,支持任何类型数据
  format:指定数据格式
返回值(Returns):
  返回 println() 函数输出的字符数据个数,长整型(long)

write()
说明(Description):
  该函数 write() 将数据流通过串口以 二进制数据的形式发出,与 print() 函数是有区别的
语法(Syntax):
  Serial.write(val)
  Serial.write(str)
  Serial.write(buf, len)
  Arduino Mega 允许使用下列串口: Serial1, Serial2, Serial3
  val:单个字节的值
  str:一连串字节的字符串
  buf:定义的数组
  len:指定的数组长度
返回值(Returns):
  返回 write() 函数通过写入串口的字节数

serialEvent()
说明(Description):
  该函数 serialEvent() 为串口中断事件函数,当串口有数据时被调用。可使用 Serial.read() 函数捕捉数据。
语法(Syntax):
  void serialEvent(){
    //statements
   }
  Arduino Mega 允许使用 serialEvent1(), serialEvent2(), serialEvent3()
  statements:任何有效的语句

Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍相关推荐

  1. Arduino串口通讯,Serial库,RGBled灯示例

    串口硬件 Arduino板通过串口(称为UART或USART串口)与其它设备进行通讯.即通用同步/异步收发器 所有Arduino板至少有一个串口,数字引脚位为 0(RX) 和1(TX)注:做通讯时0, ...

  2. mpu6050 arduino串口 通讯在ros下的可视化实验

    瞎忙好几天,草草做个总结,贴上混乱代码一堆 涉及内容如下 dmp iic  mpu6050的通讯 获取加速度 角速度 二者结合求出角姿势 四元数,发送到计算机. 串口协议编写解析 ros发布位姿里程数 ...

  3. 树莓派与Arduino串口通讯获取DH11温湿度

    本文记录了在树莓派开发时,通过串口获得Arduino开发板上采集到的温湿度,并显示在树莓派上,使用python读取Arduino串口的数据,获得温湿度采集器采集到的温湿度,然后在树莓派上做数据处理: ...

  4. LYL程序员小白的理解之简单易懂的Arduino的串口通讯

    简单易懂的Arduino的串口通讯 自白 启动串口通讯 判断串口接收数据的语句 实践 一个三位数整数 三个三位数整数 自白 我是一名大四应届生,第一次写这个博客,可能很多地方写的不是那么好,也有可能有 ...

  5. 串口通讯 IM1281

    例程为基于IM1281单向互感计量模块,关于 Modbus-RTU通讯规约简要理解. 1.通讯规约应注意校检码正确配置,否则所发送数据 无法被外设接收: (1) 预置一个 16 位寄存器为 0FFFF ...

  6. 核电仿真卡项目技术回顾 -- 串口通讯、以太网通讯的对比

    - 串口通讯 - 了解串口通讯 常见的串口通信一般是指异步串行通信.这里就要说一下同步和异步的区别了.算了,还是先讲一下串行通信的概念.那么,与串行通信相对的是什么呢. 与串行通信相对的是并行通信.数 ...

  7. Python串口通讯发送指令读写NFC源码 支持windows、linux系统

    本示例使用的读卡器介绍:RS232串口RFID NFC IC卡读写器可二次开发编程发卡器USB转COM-淘宝网 (taobao.com) class Ui_Frame(object):def setu ...

  8. 台式计算机通讯串口在哪,串口通讯

    串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 .地线.控制线等,按位进行传输数据的一种通讯方式.这种通信方式使用的数据线少,在远距离通信中可以节约通信成本 ...

  9. 23.UART串口通讯基本原理

    UART串口通讯基本原理 笔记基于正点原子官方视频 视频连接https://www.bilibili.com/video/BV1Wx411d7wT?p=71&spm_id_from=333.1 ...

最新文章

  1. 面试官:说说微信和淘宝扫码登录背后的实现原理?
  2. iOS - Frame 项目架构
  3. 天津理工大学c语言上机报告3,天津理工大学-c语言上机报告4.pdf
  4. 4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
  5. java连接weblogic数据源_使用weblogic数据源大全
  6. 虾米音乐的监控体系升级之路
  7. 008_MAC 终端使用技巧
  8. phpquery抓取网站内容简单介绍
  9. 什么是软件开发生命周期?
  10. 内网渗透 | powershellwmic详解
  11. ldap根据dn值查找objectClass
  12. orge terrain
  13. js弹幕脚本(基于油猴)
  14. 2023年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
  15. 新机如何把机械硬盘中的系统克隆到固态硬盘
  16. #UVM# 关于多次TB中 include “uvm_macros.svh“的疑问篇
  17. Unable to restart cluster, will reset it: apiserver healthz: apiserver process never appeared
  18. SDN网络控制器Floodlight安装部署和结合Mininet实现多数据中心拓扑网络
  19. IOS企业签名的APP怎么做分发?
  20. java——重试机制

热门文章

  1. 电子临时笔记做完,想不起回顾怎么办?
  2. Windows Embedded Standard 7代替windows 7
  3. Arduino Pro Mini 基本用法
  4. Android中的自定义View以及绘图工具
  5. 交通工程 | 中国迈向现代化的一个重要指标
  6. 数据分析面试题最全攻略
  7. webservice wsdl
  8. 模拟模拟交易系统(一)——需求分析
  9. 程序员除了写代码还能怎样赚钱?
  10. 中软国际python面试题_中软国际面试经验