查看“第二十一课--Microduino 串口的一些高级用法/zh”的源代码
←
第二十一课--Microduino 串口的一些高级用法/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==目的== 本教程将向大家介绍串口的一些高级用法。 出处:http://www.arduino.cn/thread-2710-1-1.html ==设备== {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Core/zh]]||1||核心板 |- |[[Microduino-USBTTL/zh]] ||1||下载程序 |} ==配置串口通信数据位、校验位、停止位== 通常我们使用'''Serial.begin(speed)'''来完成串口的初始化,这种方式,只能配置串口的波特率。 而使用'''Serial.begin(speed, config)'''可以配置数据位、校验位、停止位等。 例如Serial.begin(9600,SERIAL_8E2)是将串口波特率设为9600,数据位8,偶校验,停止位2。 config可用配置如下: {|class="wikitable" |- |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_5O2||5||奇||1 |- |SERIAL_6N2||6||无||2|| ||SERIAL_6O2||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 |} ==if (Serial)的用法== 当串口被打开时,Serial的值为真。串口被关闭时Serial的值为假。 比较囧的是,这个方法只适用于Leonardo和micro的Serial,也就是说连接连接到电脑USB的那个模拟串口。 例如以下程序,当你没有使用串口监视器打开串口时,程序就会一直循环运行while (!Serial) {;} ,当你打开串口监视器,程序会退出while循环,开始loop中的程序。 <source lang="cpp"> void setup() { Serial.begin(9600); while (!Serial) {;} } void loop() { } </source> ==read和peek输入方式的差异== 串口接收到的数据都会暂时存放在接收缓冲区中,使用read()与peek()都是从接收缓冲区中读取数据。不同的是,使用read()读取数据后,会将该数据从接收缓冲区移除;而使用peek()读取时,不会移除接收缓冲区中的数据。 你可以使用以下程序,观察其运行结果: <source lang="cpp"> char col; void setup() { Serial.begin(9600); } void loop() { while(Serial.available()>0){ col=Serial.read(); Serial.print("Read: "); Serial.println(col); delay(1000); } } </source> <source lang="cpp"> char col; void setup() { Serial.begin(9600); } void loop() { while(Serial.available()>0){ col=Serial.peek(); Serial.print("Read: "); Serial.println(col); delay(1000); } } </source> ==串口读入int型数据== 实际上是串口读入字符串,再转换为int型数据 <source lang="cpp"> while (Serial.available() > 0) { int inChar = Serial.read(); if (isDigit(inChar)) { inString += (char)inChar; } i=inString.toInt(); } } </source> ==输出不同进制的文本== 我们可以是用 Serial.print(val, format)的形式输出不同进制的文本 参数val 是需要输出的数据 参数format 是需要输出的进制形式,你可以使用如下参数: BIN(二进制) DEC(十进制) OCT(八进制) HEX(十六进制) 例如,使用Serial.print(123,BIN),你可以在串口调试器上看到1111011 使用Serial.print(123,HEX),你可以在串口调试器上看到7B ==修改串口缓冲区大小== Microduino Core串口缓冲区默认为64字节,如果你单次传输的数据较多可以将 arduino-1.0.5-r2\hardware\arduino\cores\arduino\HardwareSerial.cpp中的 #define SERIAL_BUFFER_SIZE 64 修改为 #define SERIAL_BUFFER_SIZE 128 这样就有128字节的缓冲区了 |}
返回至
第二十一课--Microduino 串口的一些高级用法/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息