Arduino机器人开发指南(二)串口篇

本篇主要讲解一下Arduino的串口及其编程方法。

串口是Arduino与其他设备进行通信的接口,需要用到“Serial”系列函数。

一共有以下10个子函数(新版本加入了更多):
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) //读取固定长度的二进制流

先看例子吧

1
2
3
4
5
6
7
void setup() {                
    Serial.begin(9600);  
}

void loop() {
    Serial.println("BeiTown");
}


这里的bengin方法为初始化并设置串口波特率,波特率表示每秒传输的bit各数,需要和通信设备同步。通常9600已经足够。
println方法类似于c语言中的printf,即输出字符串。

接下来烧入板子,打开IDE右上角的 串口监视器(Serial Monitor)
按一下板子上的reset按钮,刷新下板载系统,即可看到如图显示

表示此时已经收到的Arduino串口信息。

再看一个例子,这里直接用官方案例好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int incomingByte = 0;   // for incoming serial data

void setup() {
    Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {

    // send data only when you receive data:
    if (Serial.available() > 0) {
        // read the incoming byte:
        incomingByte = Serial.read();

        // say what you got:
        Serial.print("I received: ");
        Serial.println(incomingByte, DEC);
    }
}

这个例子类似一个echo服务器,输入什么就打印什么,read方法获取其他设备向arduino的写入数据,available表示缓冲区数据量,这里的处理方法是如果缓冲区没有数据,则不读取也不调用println方法。
效果如图:

Serial.println(incomingByte, DEC);打印接到数据十进制表示的ascii码。

以上是一些使用次数较多的方法,剩下一些这里做一个简单讲解

peek():功能类似于read(),但是我们知道当调用一次read()后,缓冲区的数据流会被读取并删除read过的数据,也就是available值会减少,但peek()不会出现类似情况,其功能类似于检测缓冲区的头部数据,反复调用peek()返回的值是一样的。用得好的话可以精简很多代码。

write():写入二进制数据到串行端口。这个数据是作为一个字节或字节序列发送的。如果发送字符串则需要用到print方法。

最后注意一下:当烧程序入板卡的时候,在完成前即L、TX、RX灯闪烁前,断开数据线很可能损坏硬件。同时测试前养成按一次reset键复位的习惯,这里特别注意,在打开串口监视器后,需要reset一次,否则无法看到效果。

Serial的更多用法随着机器人开发的深入,我们会陆续讲解。本篇到此,谢谢关注。

BeiTown
2013.03.26

本文链接:Arduino机器人开发指南(二)串口篇

转载声明:BeiTown原创,转载请注明来源:BeiTown's Coder 编码之源,谢谢


Tags: , ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>