找回密码
 立即注册

QQ登录

第3课 — Arduino 串口通信

来源: 学习教程 奥松xtm 2014-9-16 10:16 显示全部楼层 |阅读模式
Arduino与计算机通信所使用的USB接口就是下载程序时所用的USB接口,当Arduino与其他设备通信时,需要用到“Serial”系列函数,所以我们要对其有所了解,下面介绍一下几个常用的“Serial”函数。
1、Serial.begin( ) —设置串行每秒传输数据的速率(波特率)。在同计算机通讯时,使用下面这些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200。你也可以在任何时候使用其它的值,比如,与0号或1号接口通信就要求特殊的波特率。
2、Serial.print( ) — 从串行端口输出数据。
以人们可读的ASCII文本形式打印数据到串口输出。此命令可以采取多种形式。每个数字的打印输出使用的是ASCII字符。浮点型同样打印输出的是ASCII字符,保留到小数点后两位。Bytes型则打印输出单个字符。字符和字符串原样打印输出。Serial.print()打印输出数据不换行 。
代码格式:Serial.print(val)  或 Serial.print(val,格式)
参数: val:打印输出的值 - 任何数据类型 (指定进制(整数数据类型)或小数位数(浮点类型))
返回值:字节 print()将返回写入的字节数,但是否使用(或读出)这个数字是可设定的


3、Serial.println( ) — 从串行端口输出数据,跟随一个回车(ASCII 13, 或 '\r')和一个换行符(ASCII 10, 或 '\n')。这个函数所取得的值与Serial.print( )一样。
4、Serial.read( ) — 读取持续输入的数据。函数没有参数。返回值为传入的串口数据的第一个字节

5、Serial.available() — 获取从串口读取有效的字节数(字符)。这是已经传输到,并存储在串行接收缓冲区(能够存储64个字节)的数据。

硬件上的串口通信显示,在第一课中我们就介绍了 Arduino 控制器板上的一些重要信息,您是否注意到 Arduino 板子上的 TX/RX 指示灯?
TX(T:Transmitter 发送)表示为Arduino发送指令信息给计算机
RX(R:Receive 接收)表示为Arduino接收来自计算机的指令信息
当使用电脑给 Arduino 控制器上传程序时,或与计算机通信时,这两个指示灯就会闪烁
下面我来用实例说明一下,我们就来编写一个简单的小程序让计算机显示字符串“www.alsrobot.cn”。并且让一个LED配合一下,小灯闪烁一下就显示一条“www.alsrobot.cn”这样循环进行。
程序如下:

  1. void setup() {
  2.   pinMode(13, OUTPUT);
  3.   Serial.begin(9600);
  4. }
  5. void loop() {
  6.   digitalWrite(13, HIGH);
  7.   Serial.println(" www.alsrobot.cn ");  
  8.   delay(1000);              
  9.   digitalWrite(13, LOW);
  10.   Serial.println(" www.alsrobot.cn ");     
  11.   delay(1000);            
  12. }
复制代码
上传时,注意观察板载的 TX、RX灯状态,程序上传后,Arduino 板载 13 引脚灯闪烁一次,串口打印一次 "www.alsrobot.cn",如下图所示:

3.jpg

那么再来编写一个用计算机给Arduino发送指令的小程序吧,当我们发送"a",LED就会闪烁一下,同时打印"www.alsrobot.cn"。这是因为我将a赋值给val,Arduino接收到来自计算机的信号后,运行到Serial.read()指令就会将读取的数值赋值给val,然后使用if语句进行判断,如果为真将执行if{ }内指令,所以LED点亮一会就会熄灭。
程序代码:
  1. void setup() {
  2.   pinMode(13, OUTPUT);
  3.   Serial.begin(9600);
  4. }
  5. void loop() {
  6.   int val = Serial.read();
  7.   if(val == 'a')
  8.   {
  9.   digitalWrite(13, HIGH);
  10.   Serial.println(" www.alsrobot.cn ");  
  11.   delay(1000);              
  12.   digitalWrite(13, LOW);
  13.   Serial.println(" www.alsrobot.cn ");     
  14.   delay(1000);   
  15.   }         
  16. }
复制代码
将程序上传到 Arduino 控制器中,然后打开串口监视器,输入 a,看一下是什么效果吧!注意要选择和程序中一致的波特率,本程序中使用的波特率是 9600,下图是我的实验效果:
4.jpg

输入a再看看pin13接口的LED吧!
相关文章:玩转Arduino-编程语言
                 玩转Arduino-编译环境软件
本文转自:奥松机器人中文官网

回复

使用道具 举报

大神点评1

  int val = Serial.read();
这里为什么用int而不是char或者string
回复 支持 反对

使用道具 举报

您可能感兴趣的文章

您需要登录后才可以回帖 登录 | 立即注册

关注0

粉丝5

帖子138

发布主题
社区热门 MORE+
    社区热帖 MORE+