串口是Arduino与其它设备进行通信的接口

所有的Arduino控制板有至少一个串口(又称作为UART或USART)。它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机进行通信。因此,如果你使用这些功能的同时你不能使用引脚0和1作为输入或输出

Arduino Mega 有三个额外的串口:Serial 1使用19(RX)和18(TX),Serial 2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX);若要使用这三个引脚与您的个人电脑通信,你需要一个额外的USB转串口适配器,因为这三个引脚没有连接到Mega上的USB转串口适配器,若要用它们来与外部的TTL串口设备进行通信,将TX引脚连接到您的设备的RX引脚,将RX引脚连接到您的设备的TX引脚,将GND连接到您的设备的GND,(不要直接将这些引脚直接连接到RS232串口;他们的工作电压在+/- 12V,可能会损坏您的Arduino控制板。)

Serial.begin(9600);      //开启串行通信接口并设置通信波特率

if (Serial)   //表示指定的串口是否准备好

比较囧的是,这个方法只适用于Leonardo和micro的Serial

Arduino Mega 特有:
if (Serial1)
if (Serial2)
if (Serial3)

Serial.available(); //获取从串口能够读取有效的字节数

这是已经传输到,并存储在串行接收缓冲区(能够存储64个字节)的数据。 available()继承了 Stream类

注意使用时通常用delay(100)以保证串口字符接收完毕

仅适用于Arduino Mega :

Serial1.available()

Serial2.available()

Serial3.available()

Serial.end()     停用串行通信,使RX和TX引脚用于一般输入和输出。要重新使用串行通信, 需要 Serial.begin()语句

Serial.read();

读取串口数据,一次读一个字符,读完后删除已读数据

返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型

bl=Serial.findUntil("ell","|");    从串行缓冲区读取数据,直到找到一个给定字符串或字符串终止位;

如果目标字符串被发现,该函数返回true,如果超时则返回false

参数1  要搜索的字符串

参数2  终止位

Serial.flush();    等待输出数据传送完毕

Serial.peek();  读取下一字节

读串口缓存中下一字节的数据(字符型),但不从内部缓存中删除该数据。也就是说,连续的调用peek()将返回同一个字符

返回串口缓存中下一字节(字符)的数据,如果没有返回-1,整数int型

while(Serial.read()>= 0){}       清空缓存

因Serial.read()函数读取串口缓存中的一个字符,并删除已读字符。因此可以用这句代码来清空串口缓存

s=Serial.parseInt();//从缓冲区读取一个int整数

Serial.print();   串口输出数据函数,写入字符串数据到串口

语法:

Serial.print(val)

Serial.print(val,format)

val: 打印的值,任意数据类型 ;   format: 输出的数据格式,包括整数类型和浮点型数据的小数点位数

示例

Serial.print(78, BIN) 得到 "1001110"       BIN表示二进制

Serial.print(78, OCT) 得到 "116"             OCT表示8进制

Serial.print(78, DEC) 得到 "78"               DEC表示10进制--默认

Serial.print(78, HEX) 得到 "4E"               HEX表示16进制

Serial.print(1.23456, 0) 得到 "1"              取0位小数

Serial.print(1.23456, 2) 得到 "1.23"         取2位小数

Serial.print('N') 得到 "N"                          输出字符串

Serial.println();   与Serial.print()类似  后面自动加入换行

int x=Serial.readBytes(buffer,length);   从串口读取指定长度length的字符到缓存数组buffer

返回存入缓存的字符数,0表示没有有效数据

Serial.readBytesUntil(character,buffer,length); 从串口缓存读取指定长度的字符到数组buffer,遇到终止字符character后停止

character : 终止的字符 (char)

buffer: 存储读取数据的缓存(char[] 或byte[])

返回存入缓存的字符数,0表示没有有效数据

String comdata =Serial.readString();   从串口缓存区读取全部数据到一个字符串型变量

返回从串口缓存区中读取的一个字符串--包括\n

String comdata =Serial.readStringUntil(terminator);   从串口缓存区读取字符到一个字符串型变量,直至读完或遇到某终止字符

terminator:终止字符(char型)

返回值 从串口缓存区中读取的整个字符串,直至检测到终止字符

float comfloat=Serial.parseFloat();    读串口缓存区第一个有效的浮点型数据,数字将被跳过。当读到第一个非浮点数时函数结束

返回值  返回串口缓存区第一个有效的浮点型数据,数字将被跳过

int comInt=Serial.parseInt()     从串口接收数据流中读取第一个有效整数(包括负数)

注意:非数字的首字符或者负号将被跳过;当可配置的超时值没有读到有效字符时,或者读不到有效整数时,分析停止;如果超时且读不到有效整数时,返回0

返回值  返回下一个有效整型值

Serial.find()     从串口缓存区读取数据,寻找目标字符串target(char型)

语法:

char target[] = ”目标字符串”;

Serial.find(target);

返回值  找到目标字符串返回真,否则为假

Serial.findUntil(target,terminal);从串口缓存区读取数据,寻找目标字符串target(char型数组),直到出现终止字符串terminal(char型数组),找到为真,否则为假

Serial.write();    串口输出数据函数。写二进制数据到串口

语法   Serial.write(val)     val: 字节

Serial.write(str)    str: 一串字节

Serial.write(buf, len)    buf: 字节数组   len: buf的长度

返回值     字节长度

Serial.SerialEvent();     串口数据准备好时触发的事件函数,即串口数据准备好调用该函数

语法:Serial.serialEvent{//statements}

statements: 任何有效的语句

当使用print()发送一个数据时,Arduino发送的并不是数据本身,而是将数据转换成字符(无论是何种类型的数据,如int a=100数据也会被转化为三个char型数据,即’1’ .’0’.’0’),再将字符翻译成ASCII码发送出去,串口监视器接收到ASCLL码,则会显示对应的字符(串口监视器会自动进行ASCII码翻译工作)。因此,使用print()函数是以ASCLL码的形式输出数据到串口。

而当使用write()函数时,Arduino发送的是数值本身,省略了把字符转化为ASCII码的过程。串口监视器接收到数据后,也会将数值当做ASCLL码而显示其对应的字符(write()函数只支持发送0~255整型数据)

资料:https://blog.csdn.net/iracer/article/details/50334041

Arduino通讯串口的更多相关文章

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

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

  2. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  3. 关于arduino清空串口缓存(转)

    在arduino1.0之前的版本 Serial.flush()的作用是是清空串口缓存( dropping received incoming data).但在1.0之后的版本 Serial.flush ...

  4. 【ARDUINO】串口无法打开问题

    1.查看是否串口被锁 sudo arduino ls /var/lock sudo rm /var/lock/LCK..ttyACM* 2.查看arduino安装位置 dpkg -S XXXX 3.原 ...

  5. Arduino通过串口监视器收发数据

    在串口监视器中发送数据,板子收到数据并打印出来. 不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开. 代码 /* 串口事件 当新的串口数据到来时,我们会将它添加到一 ...

  6. Arduino在串口监视器上输出字母表

    程序会在Arduino IDE的串口监视器上输出一个字母表. 不需要额外电路,但是板子必须通过串口线或USB线连接到电脑. 代码 程序在setup()函数中建立串口连接,然后逐行输出a~z的字母I表, ...

  7. [Arduino] 在串口读取多个字符串,并且转换为数字数组

    功能如题目.在串口收到逗号分割的6串数字比如100,200,45,4,87,99然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值代码注释很详细了,就不再说明了. //定义一个c ...

  8. PMS5003ST+Arduino Nano 串口读取数据

    先上代码: 库文件是在guihub上的大神写的https://github.com/jbanaszczyk,我拿来小改下用以支持5003ST #include <Arduino.h> #i ...

  9. Arduino 433 + 串口

    http://www.freebuf.com/articles/wireless/105398.html /*本作品使用的例程中包含RCSwitch库文件用于信号的解码和编码发送*/ #include ...

随机推荐

  1. web可拖动控件js

    先下载:http://code.jquery.com/ui/1.10.3/jquery-ui.js $('.i-i-yuan').draggable({ containment: '#app'//可通 ...

  2. Unity Ray 射线

    射线:射线是3D世界一个向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射. 用途:射线范围比较广,多用于碰撞检测(如:子弹飞行是否击中目标).角色移动等. Ray是一个结 ...

  3. Debian或者Ubuntu中安装secureCRT/secureFX

    1.官网下载 ubuntu 下的 xx.deb安装包.此处使用的安装包是scrt-sfx-8.5.4-1942.ubuntu16-64.x86_64.deb,点击下载,提取码:5em3. 2.安装 d ...

  4. wcf restful 访问报错 *.svc HTTP error 404.17 - Not Found

    安装完成 iisreset,即使不重启也已经可以使用了

  5. Java ——多线程编程

    本节重点思维导图 多线程编程

  6. CSS3——边框 圆角 背景 渐变 文本效果

    边框 圆角边框 盒阴影 边界图片 圆角 CSS3 圆角制作器 指定每个角 背景 多重背景图像 大小 图像的定位 背景剪裁 渐变 线性渐变(Linear Gradients)- 向下/向上/向左/向右/ ...

  7. ubutnu同时安装OpenCV2和OpenCV3及contrib

    1.OpenCV2源码安装 安装依赖项 sudo apt-get install build-essential //build-essential是c语言的开发包,包含了gcc make gdb和l ...

  8. 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)

    ubuntu更新软件时 apt-get upgrade 遇到 E: 无法获得锁 /: 资源暂时不可用) E: Unable to acquire the dpkg frontend lock (/va ...

  9. Go语言入门篇-环境准备

    一.GO语言特点 静态类型:首先要明确变量类型,如上所示. 编译型:指GO语言要被编译成机器能识别机器代码. GO语言开源. 编程范式:支持“函数式”和“面向对象” GO语言原生的支持并发编程:即GO ...

  10. [Git] 026 config 命令的补充

    少废话,上例子 1. 让命令更醒目 $ git config --global color.ui true 2. 偷懒 $ git config --global alias.st status 使用 ...