Arduino-串口函数Serial
串口是Arduino与其它设备进行通信的接口,我们需要很好的掌握它的使用。Arduino串口使用相关的函数共有10个(随着版本的升级,新版本加入了更多,具体请参见官网:http://www.arduino.cc/)。
Serial.begin(); //开启串行通信接口并设置通信波特率
Serial.end(); //关闭通信串口
Serial.available();//判断串口缓冲器是否有数据装入
Serial.read(); //读取串口数据
Serial.peek(); //返回下一字节(字符)输入数据,但不删除它
Serial.flush(); //清空串口缓存
Serial.print(); //写入字符串数据到串口
Serial.println(); //写入字符串数据+换行到串口
Serial.write(); //写入二进制数据到串口
Serial.SerialEvent();//read时触发的事件函数
Serial.readBytes(buffer,length);//读取固定长度的二进制流
Serial.println(incomingByte, DEC);//打印接到数据十进制表示的ascii码。 HEX 十六进制表示
peek():功能类似于read(),但是我们知道当调用一次read()后,缓冲区的数据流会被读取并删除read过的数据,也就是available值会减少,但peek()不会出现类似情况,其功能类似于检测缓冲区的头部数据,反复调用peek()返回的值是一样的。用得好的话可以精简很多代码。
write():写入二进制数据到串行端口。这个数据是作为一个字节或字节序列发送的。如果发送字符串则需要用到print方法。
最后注意一下:当烧程序入板卡的时候,在完成前即L、TX、RX灯闪烁前,断开数据线很可能损坏硬件。同时测试前养成按一次reset键复位的习惯,这里特别注意,在打开串口监视器后,需要reset一次,否则无法看到效果。
还有一个问题:
一般将字符通过串口打印到电脑(用USB串口)已经够用了,但是当你想把把字符发送到另一个串口的时候,或是想用一块你手头上已有的开发板发送数据给Arduino,然后让Arduino显示,问题顿时变得麻烦起来!
如何从一个单片机的串口发送数据到Arduino上,然后用Arduino显示呢?
这就要从Arduino的串口收发函数说起了.
(以下实例基于Arduino UNO)
1,接收函数Serial.read()
int Serial.read(void)
如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节.
如果数据缓冲区没有数据,将返回-1.
2,发送函数Serial.print()
Serial.print(val)
Serial.print(val, format)
Serial.print(val)
首先注意: print是一个打印函数,主要用于在上位机上显示,让数据可视化,它会将数据用字符的形式(ASCII码)逐个发送到串口. 一般不用这个函数来进行数据传输.
比如下面这段代码不会在串口助手上显示3个256,而会分别显示'2','5','6'的ASCII码值,50,53,54(分三次发送,有三个地址不同的数据缓冲区)
void setup() {
// initialize serial ports:
Serial.begin();
Serial1.begin();
Serial3.begin();
Serial3.print();
if (Serial1.available()>) {
Serial.println(Serial1.read());
Serial.println(Serial1.read());
Serial.println(Serial1.read());
}
}
void loop() {
}
既然print是一个打印函数,那么自然,参数val的类型是任意的.
Serial.print(val, format)
将val的值转换成format指定的形式发送,可为BIN,OCT,HEX,DEC.
3,发送函数Serial.write
Serial.write(str)
str为字符串的首地址,buf为一个用来存放数据的数组的首地址. 这个函数会先发送字符串,然后返回字符串的长度.
void setup(){
Serial.begin();
}
void loop(){
Serial.write(); // send a byte with the value 45
int bytesSent = Serial.write("hello");
Serial.println(bytesSent);
}
Serial.write(val)
val的数据类型为unsigned char,这个函数每次只发送一个字节的数据,所以val的值在0-255之间.
Serial.write(buf, len)
buf为要发送的数组的首地址(注意数组的类型为unsigned char),len为数组的长度.
void setup(){
Serial.begin();
Serial3.begin();
Serial1.begin();
}
void loop(){
unsigned char data[] ={,};
Serial3.write(data,);
if(Serial1.available()>)
Serial.println(Serial1.read());
Serial.println(Serial1.read());
}
回到开头的问题,如何从一个单片机的串口发送数据到Arduino上,然后用Arduino显示呢?
我们可以先用单片机的print函数把数据打印到串口,然后用Serial1.readBytes(Serial的加强版,具体看官方参考手册)把数据从串口读取回来(以ASCII码的形式),然后把ASCII码转换成字符,然后发送.
unsigned int send_data =;
char rx_data[];
void setup(){
Serial.begin();
Serial3.begin();
Serial1.begin();
} void loop()
{
Serial3.print( send_data);
if(Serial1.available()>)
{
Serial1.readBytes(rx_data,);
for(char i=;i<;i++)
{
Serial.print(char(rx_data));
}
Serial.print("\n");
}
delay();
}
Arduino-串口函数Serial的更多相关文章
- Eclipse编译Arduino程序不能使用串口函数Serial.begin解决办法
在Arduino官方的编译器当中Serial.begin(9600);初始化语句是可以直接使用的,而到Eclipse当中,同样的语句却不能用了.会出现下面的问题: 显然,这是Eclipse没有找到Se ...
- Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍
声明: 本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.h ...
- 进阶之路(基础篇) - 019 Serial串口函数说明
本文总结了Arduino常用串口操作函数,函数说明部分来源于Arduino 官网串口使用指南,示例与实验部分为自编.本文是对Arduino串口操作函数的较全面总结,可作为工具贴查找使用. 函数:if( ...
- Arduino - 串口操作函数与示例代码大全
来源:https://blog.csdn.net/iracer/article/details/50334041 Arduino - 串口操作函数与示例代码大全 本文总结了Arduino常用串口操作函 ...
- Arduino 串口篇 Arduino发送十六进制 send HEX via serial port RS232-to-USB to PC
发送十六进制比较直观,可以在上位机中直接获取十六进制的数据,然后在在上位机上将十六进制HEX转换成BIN(二进制)或者DEC(十进制)就十分简单有效了. 下面是在Arduino上怎么演示直接发送16进 ...
- ESP-8266 串口通信(Serial)
ESP8266的串口通信与传统的Arduino设备完全一样.除了硬件FIFO(128字节用于TX和RX)之外,硬件串口还有额外的 256字节的TX和RX缓存.发送和接收全都由中断驱动.当FIFO/缓存 ...
- Arduino 串口篇 Arduino发送二进制 send binary via RS232-to-USB to PC
有用的链接在这里:http://hi.baidu.com/mizuda/item/06b7fdc1d0e45a0ec710b2dd 更加详细的内容请查阅Arduino官方:http://arduino ...
- win10上使用php与python实现与arduino串口通信
注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...
- Arduino串口的一些高级用法
1.配置串口通信数据位.校验位.停止位通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率.而使用Serial.begin(speed, config) ...
随机推荐
- 1065. A+B and C (64bit) (20)
Given three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C. Input S ...
- /etc目录下重要的目录和文件
牢记: 1.*/etc/sysconfig/network-scripts/ifcfg-eth0 网卡的配置信息 重启网卡:1)/etc/init.d/network restart(所有网卡) ...
- java——数组栈 ArrayStack
栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...
- linux 6 安装 使用 XtraBackup
帮助文档:https://www.cnblogs.com/imweihao/p/7290026.html ---Yum安装 官网地址:https://www.percona.com/doc/perco ...
- 以sqlplus管理员权限登陆oracle
>>sqlplus username/password@orcl as sysdba 切记切记
- 彻底理解和解决移动WEB开发中CLICK点透问题
在移动WEB开发中,有时候可能会出现点透问题,本文将围绕这个TAP点透问题,详细的讲述到底什么是点透,为什么会出现点透,如何避免出现点透,如果不可避免的出现了,如何解决解决移动WEB开发中CLICK点 ...
- OpenStack Weekly Rank 2015.08.10
Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 5 1 1 6 12 Sw ...
- zepto.js常用操作
zepto.js是移动端的jquery,但是并没有提供所有与jquery类似的api.Zepto设计的目的是有一个5-10k的通用库.下载并快速执行.有一个熟悉通用的API,所以你能把你主要的精力放到 ...
- Fedora14 mount出现错误时解决办法【亲测有效】
挂载时出现了如上图所示问题,看第一条英语提示,我刚开始以为是文件权限不够,改了权限之后,依旧存在这样的问题, 于是,我上网查阅了一些资料: 在解决之前,先让我们一起来了解一下nfs: NFS最大功能就 ...
- [转]png图片压缩大小但是不改变透明部分
降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...