声明:

本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.html

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

前言

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 Lenonardo 串口 Serial1直接通过 TTL 5V 通讯,占用引脚 0(Rx)和 1(Tx)

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

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

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

Stream 类

Stream 类 包含下列函数:

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 类;同时增加了几个新的函数,所有方法如下:

begin()

说明(Description):

  该函数 begint() 设置串口数据传输的波特率。

语法(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.println(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 串口函数函数介绍暂时到这里,所有参考资料 来着 Arduino.cc

声明:

本ID发布的所有文章及随笔均为原创,可随意转载,转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.html

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

Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍的更多相关文章

  1. python与arduino串口通讯对接opencv实现智能物品分拣

    2018-05-0118:53:50 先上图: 再来视频: http://v.youku.com/v_show/id_XMzU3NzAwNzMyNA==.html?spm=a2hzp.8244740. ...

  2. win10上使用php与python实现与arduino串口通信

    注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...

  3. C#串口通讯教程 简化一切 只保留核心功能 这可能是最易于理解的一篇教程

    C#串口通讯教程 简化一切 只保留核心功能 这可能是最易于理解的一篇教程   串口的定义,请自行了解. C#操作串口通讯在.Net强大类库的支持下,只需要三个步骤: 1 创建 2 打开 3 发送/接受 ...

  4. 手机与Arduino蓝牙串口通讯实验及完整例程

    安卓手机与Arduino之间采用蓝牙串口通讯,是很多智能装置和互动装置常用的控制方法,简单而有效,无需网络环境,很实用的技术. 实验采用Arduino UNO板,加了一块1602LCD屏做显示(因为只 ...

  5. 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现

    目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...

  6. STM32F10x 学习笔记6(USART实现串口通讯 2)

    这次讲讲利用串口收发中断来进行串口通讯.STM32 上为每个串口分配了一个中断.也就是说无论是发送完成还是收到数据或是数据溢出都产生同一个中断.程序需在中断处理函数中读取状态寄存器(USART_SR) ...

  7. STM32F10x 学习笔记5(USART实现串口通讯 1)

    STM32F10x 系列单片机中都包含了USART 模块,所谓USART,就是通用同步异步收发器.通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间 ...

  8. 树莓派中QT实现串口通讯

    树莓派中QT实现串口通讯 开发平台为QT 此博客QT使用的为WiringPi驱动 我使用的串口调试助手为 cutecom 先简单说一些开发过程中需要注意的问题 Linux 下设备为 tty ,对应在 ...

  9. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

随机推荐

  1. Uva 11151 - Longest Palindrome

    A palindrome is a string that reads the same from the left as it does from the right. For example, I ...

  2. 第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)

    124. Binary Tree Maximum Path Sum 题意:给定一个二叉树,每个节点有一个权值,寻找任意一个路径,使得权值和最大,只需返回权值和. 思路:对于每一个节点 首先考虑以这个节 ...

  3. 03、HelleBaiduMap

    D:\百度地图\百度地图\资料\百度地图与定位SDK\百度地图v3.5.0\BaiduMap_AndroidSDK_v3.5.0_All\BaiduMap_AndroidSDK_v3.5.0_Docs ...

  4. E20170626-gg

    occupy   vt. 占领; 使用,住在…; 使从事,使忙碌; 任职; stack   n. 垛,干草堆; (一排) 烟囱; 层积; 整个的藏书架排列;

  5. [Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)

    创建临时配置文件以在设备上运行您的应用程序而无需Xcode.在开始之前,您需要一个App ID,一个分发证书和多个注册设备. 有关完整的临时配置文件工作流程,请转到Xcode帮助中的分发到已注册设备( ...

  6. 汇编程序44:检测点13.1 (jmp near ptr 标号指令的中断例程)

    安装程序: assume cs:code //jmp near ptr 标号指令的替代实现,使用iret指令 code segment start: mov ax,cs mov ds,ax mov s ...

  7. 【BZOJ3960】DZY Loves Math V(数论)

    题目: BZOJ3560 分析: orz跳瓜. 欧拉函数的公式: \[\phi(n)=n(\prod \frac{p_i-1}{p_i})\] 其中 \(p_i\) 取遍 \(n\) 的所有质因子. ...

  8. ACM_新七步诗(深搜)

    新七步诗 Time Limit: 2000/1000ms (Java/Others) Problem Description: 突然的一天,小锴做了一个梦,梦见自己来到了三国,而自己也成了梦寐以求的帅 ...

  9. 关于linux下的.a文件与 .so 文件

    连续几天终于将一个又一个问题解决了,这里说其中一个问题 描述问题:使用多线程pthread的时候,(我用的IDE,CODEBOLCKS)编译后发现直接弹出窗口,程序还没有被Build..巴拉巴拉,然后 ...

  10. [转]Android | Simple SQLite Database Tutorial

    本文转自:http://hmkcode.com/android-simple-sqlite-database-tutorial/ Android SQLite database is an integ ...