本帖最后由 董董soul 于 2016-10-27 10:51 编辑
在前面几课,我们一直都在驱动LED,固然可以把LED作为一些状态输出的指示灯,但是其所能表达的状态很单调,如果我们需要输出具体数据应该怎么办呢?
如果需要输出数据时,我们可以使用串口输出。在OCROBOT控制板上,USB输出数据其实就是串口输出数据。
以MANGO为例,MANGO的USB接口通过一个USB转TTL芯片连接到D0,D1端口。当我们让USB输出或者输入数据时,其实就相当于D0,D1输出或者输入数据。(MANGO下可以断开这种强制的USB与串口连接,后面教程会介绍。)
首先介绍一下使用串口最基本的几个函数。
begin()
将串行数据传输速率设置为位/秒(波特)。与计算机进行通信时,可以使用这些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。当然,您也可以指定其他波特率 – 例如,引脚0和1和一个元件进行通信,它需要一个特定的波特率。
语法
Serial.begin(speed)
参数
speed: 位/秒 (波特) – long
print()
以人们可读的ASCII文本形式打印数据到串口输出。此命令可以采取多种形式。每个数字的打印输出使用的是ASCII字符。浮点型同样打印输出的是ASCII字符,保留到小数点后两位。Bytes型则打印输出单个字符。字符和字符串原样打印输出。Serial.print()打印输出数据不换行,Serial.println()打印输出数据自动换行处理。例如:
Serial.print(78)输出为“78”
Serial.print(1.23456)输出为“1.23”
Serial.print(“N”)输出为“N”
Serial.print(“Hello world.”)输出为“Hello world.”
也可以自己定义输出为几进制(格式);可以是BIN(二进制,或以2为基数),OCT(八进制,或以8为基数),DEC(十进制,或以10为基数),HEX(十六进制,或以16为基数)。对于浮点型数字,可以指定输出的小数数位。例如
Serial.print(78,BIN)输出为“1001110”
Serial.print(78,OCT)输出为“116”
Serial.print(78,DEC)输出为“78”
Serial.print(78,HEX)输出为“4E”
Serial.println(1.23456,0)输出为“1”
Serial.println(1.23456,2)输出为“1.23”
Serial.println(1.23456,4)输出为“1.2346”
你可以通过基于闪存的字符串来进行打印输出,将数据放入F()中,再放入Serial.print()。例如 Serial.print(F(“Hello world”)) 若要发送一个字节,则使用 Serial.write()。
语法
Serial.print(val)
Serial.print(val,格式)
参数
val:打印输出的值 – 任何数据类型
格式:指定进制(整数数据类型)或小数位数(浮点类型)
返回
字节 print()将返回写入的字节数,但是否使用(或读出)这个数字是可设定的
println()
说明
打印数据到串行端口,输出人们可识别的ASCII码文本并回车 (ASCII 13, 或 ‘\r’) 及换行(ASCII 10, 或 ‘\n’)。此命令采用的形式与Serial.print ()相同 。
语法
Serial.println(val)
Serial.println(val, format)
参数
val: 打印的内容 – 任何数据类型都可以
format: 指定基数(整数数据类型)或小数位数(浮点类型)
返回
字节(byte)
println()将返回写入的字节数,但可以选择是否使用它。
print()和println()的区别只有println输出数据后还加了回车。
我们通过串口输出一份ASCII表来学习一下串口输出的最基本使用方法。
- /*
- ASCII 码表
-
- 输出一个字节值的所有可能的格式
- *其中包含原始二进制值
- *还有ASCII编码的十进制、十六进制、八进制和二进制值
-
- 欲了解更多有关ASCII码相关知识,点击http://www.asciitable.com 与 http://en.wikipedia.org/wiki/ASCII
-
-
- created 2006
- by Nicholas Zambetti
- modified 9 Apr 2012
- by Tom Igoe
-
- This example code is in the public domain.
- <http://www.zambetti.com>
-
- */
- void setup() {
- Serial.begin(9600); //初始化串口
- Serial.println("ASCII Table ~ Character Map"); //串口输出"ASCII Table ~ Character Map"
- }
- // 第一个ASCII字符"!"编号为33
- int thisByte = 33;
- // 你也可以把ASCII字符写在单引号中
- // 例如'!'与33相同,所以你也可以这样写这一行代码
- // int thisByte = '!';
- void loop() {
- // 输出价值不变,即字节的原始二进制版本。串行监控解释所有的字节为ASCII码,所以33,第一个数字,将显示为'!'
- Serial.write(thisByte);
- Serial.print(", dec: ");
- // 输出一个以ASCII十进制编码为基础的值(基数为10)
- // 十进制是Serial.print()与Serial.println()函数的默认输出格式。所以如果你要输出十进制,可以不用进行格式申明。
- Serial.print(thisByte);
- Serial.print(", hex: ");
- // 输出一个以ASCII十六进制编码为基础的值(基数为16)
- Serial.print(thisByte, HEX);
- Serial.print(", oct: ");
- // 输出一个以ASCII八进制编码为基础的值(基数为8)
- Serial.print(thisByte, OCT);
- Serial.print(", bin: ");
- // 输出一个以ASCII二进制编码为基础的值(基数为2)
- // 也同时输出换行符表示该行输出结束
- Serial.println(thisByte, BIN);
- // 输出的最后一个字符为 '~' 或者是126
- if(thisByte == 126) { // you could also use if (thisByte == '~') {
- // 输出最后一个字附后就进入一个无尽循环,串口就再也不往出输出字符了
- while(true) {
- continue;
- }
- }
- // 进入下一个字符
- thisByte++;
- }
复制代码
程序下载进去后我们打开串口监视器,就能看到输出的ASCII表了。
课后练习:
学习了输出ASCII表的部分字符后,我们尝试的输出一棵树。。。一个笑脸等,这就看大家创意了。
|