Arduino 串口的一些高级用法
来源:
1.配置串口通信数据位、校验位、停止位 通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率。 而使用Serial.begin(speed, config)可以配置数据位、校验位、停止位等。 例如Serial.begin(9600,SERIAL_8E2)是将串口波特率设为9600,数据位8,偶校验,停止位2。 config可用配置如下:
config可选配置 | 数据位 | 校验位 | 停止位 | config可选配置 | 数据位 | 校验位 | 停止位 | |
SERIAL_5N1 | 5 | 无 | 1 | SERIAL_5E2 | 5 | 偶 | 2 | |
SERIAL_6N1 | 6 | 无 | 1 | SERIAL_6E2 | 6 | 偶 | 2 | |
SERIAL_7N1 | 7 | 无 | 1 | SERIAL_7E2 | 7 | 偶 | 2 | |
SERIAL_8N1 | 8 | 无 | 1 | SERIAL_8E2 | 8 | 偶 | 2 | |
SERIAL_5N2 | 5 | 无 | 2 | SERIAL_5O1 | 5 | 奇 | 1 | |
SERIAL_6N2 | 6 | 无 | 2 | SERIAL_6O1 | 6 | 奇 | 1 | |
SERIAL_7N2 | 7 | 无 | 2 | SERIAL_7O1 | 7 | 奇 | 1 | |
SERIAL_8N2 | 8 | 无 | 2 | SERIAL_8O1 | 8 | 奇 | 1 | |
SERIAL_5E1 | 5 | 偶 | 1 | SERIAL_5O2 | 5 | 奇 | 2 | |
SERIAL_6E1 | 6 | 偶 | 1 | SERIAL_6O2 | 6 | 奇 | 2 | |
SERIAL_7E1 | 7 | 偶 | 1 | SERIAL_7O2 | 7 | 奇 | 2 | |
SERIAL_8E1 | 8 | 偶 | 1 | SERIAL_8O2 | 8 | 奇 | 2 |
2. if (Serial)的用法 当串口被打开时,Serial的值为真。串口被关闭时Serial的值为假。 比较囧的是,这个方法只适用于Leonardo和micro的Serial,也就是说连接连接到电脑USB的那个模拟串口。 例如以下程序,当你没有使用串口监视器打开串口时,程序就会一直循环运行while (!Serial) {;} ,当你打开串口监视器,程序会退出while循环,开始loop中的程序。
void setup() {
|
|
Serial.begin(9600);
|
|
while (!Serial) {;}
|
|
}
|
|
void loop() {
|
|
}
|
3.read和peek输入方式的差异 串口接收到的数据都会暂时存放在接收缓冲区中,使用read()与peek()都是从接收缓冲区中读取数据。不同的是,使用read()读取数据后,会将该数据从接收缓冲区移除;而使用peek()读取时,不会移除接收缓冲区中的数据。 你可以使用以下程序,观察其运行结果:
char col;
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
}
|
|
void loop() {
|
|
while(Serial.available()>0){
|
|
col=Serial.read();
|
|
Serial.print("Read: ");
|
|
Serial.println(col);
|
|
delay(1000);
|
|
}
|
|
}
|
char col;
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
}
|
|
void loop() {
|
|
while(Serial.available()>0){
|
|
col=Serial.peek();
|
|
Serial.print("Read: ");
|
|
Serial.println(col);
|
|
delay(1000);
|
|
}
|
|
}
|
4. 串口读入int型数据 实际上是串口读入字符串,再转换为int型数据。
while (Serial.available() > 0) {
|
|
int inChar = Serial.read();
|
|
if (isDigit(inChar))
|
|
{
|
|
inString += (char)inChar;
|
|
}
|
|
i=inString.toInt();
|
|
}
|
|
}
|
5.输出不同进制的文本 我们可以是用 Serial.print(val, format)的形式输出不同进制的文本 参数val 是需要输出的数据 参数format 是需要输出的进制形式,你可以使用如下参数: BIN(二进制) DEC(十进制) OCT(八进制) HEX(十六进制) 例如,使用Serial.print(123,BIN),你可以在串口调试器上看到1111011 使用Serial.print(123,HEX),你可以在串口调试器上看到7B
6.Arduino MEGA\Arduino DUE上其他串口用法 serial1\serial2\serial3 和serial用法一样 比如serial3.begin(9600);
6.修改串口缓冲区大小 Arduino串口缓冲区默认为64字节,如果你单次传输的数据较多可以将 arduino-1.0.5-r2\hardware\arduino\cores\arduino\HardwareSerial.cpp中的 #define SERIAL_BUFFER_SIZE 64 修改为 #define SERIAL_BUFFER_SIZE 128 这样就有128字节的缓冲区了
Arduino 串口的一些高级用法的更多相关文章
- Arduino串口的一些高级用法
1.配置串口通信数据位.校验位.停止位通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率.而使用Serial.begin(speed, config) ...
- Arduino - 串口操作函数与示例代码大全
来源:https://blog.csdn.net/iracer/article/details/50334041 Arduino - 串口操作函数与示例代码大全 本文总结了Arduino常用串口操作函 ...
- Visual Studio 宏的高级用法
因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ...
- SolrNet高级用法(分页、Facet查询、任意分组)
前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)
上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...
- 再谈Newtonsoft.Json高级用法
上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充. 阅读目录 动态改变属性序列化名称 枚举值序列 ...
- Jquery remove 高级用法
Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ...
- Newtonsoft.Json高级用法(转)
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
随机推荐
- e3mall商城总结12之购物车的实现、以及购物车小计问题、json406报错
说在前面的话 1.本节主要讲了e3mall购物车的实现方法,我搭建的项目和系统购物车有一些区别,因此这里需要说一下.系统搭建的项目在未登陆的情况下也可以通过cookie进行加入购物车,当用户要下单的时 ...
- 4300 字Python列表使用总结,用心!
今天列表专题的目录如下: 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这 ...
- Labview学习之路(八)如何让控件显示在修饰符的前面
在Labview2017版本中,前面板选择修饰控件,会出现部分修饰控件会掩盖其他控件,情况如下: 我们右键点击和属性中都没有相关属性的改变,为什么是这样我也不清除: 上网查了一下,看到其他版本会有显示 ...
- 【HttpRunner v3.x】笔记—7. 测试用例-teststeps-RunTestCase
以前我在写接口自动化用例的时候,为了保证用例的独立性,需要在setUp里调用各种满足用例的一些前置条件,其中就不乏调用了其他测试用例中的方法. 而httprunner也是支持了这一项很重要的特性,通过 ...
- html打印后不刷新当前页
这种方法可以在打印的页面中添加样式,新页面跳转打印 doPrint(ids){ var titleHTML=document.getElementById(ids).innerHTML; var Op ...
- 万字长文,以代码的思想去详细讲解yolov3算法的实现原理和训练过程,Visdrone数据集实战训练
以代码的思想去详细讲解yolov3算法的实现原理和训练过程,并教使用visdrone2019数据集和自己制作数据集两种方式去训练自己的pytorch搭建的yolov3模型,吐血整理万字长文,纯属干货 ...
- dya49:django:wsgrief&模板渲染Jinjia2&django的MTV/MVC框架&创建/启动一个django项目
目录 1.自定义web框架wsgiref版 2.自定义web框架wsgiref版-优化版 3.模板渲染JinJa2 4.MTV和MVC框架 5.django:下载安装&创建启动 自定义web框 ...
- SpringAOP+源码解析,切就完事了
本文是对近期学习知识的一个总结,附带源码注释及流程图,如有不足之处,还望评论区批评指正. 目录 一.AOP.SpringAOP.AspectJ的区别 二.AOP关键术语 三.通知的五种类型 四.切入点 ...
- loadrunner做http接口的性能测试
不用录制脚本的方法 步骤: 1.先打开Virtual User Generator——选择Web/HTTP协议,进入到主页面,这里不按照传统录脚本的方式输入url,所以直接叉掉录制脚本选项,进入下面的 ...
- 使用Excel设计fastreport报表
最近做项目遇到一些报表设计的问题.项目的报表使用 Fast Report,然而该控件调整报表格式比较繁琐,有时候调整某一栏的宽度,整个标题栏都需要调整,且调整以后 还不一定能对齐.客户的很多报表都是基 ...