极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 沧海笑1122

【体会分享】Arduino Leonardo board使用 serial的几点注意事项

[复制链接]
发表于 2014-2-26 23:06:47 | 显示全部楼层 |阅读模式
本帖最后由 沧海笑1122 于 2014-2-26 23:19 编辑

【背景】最近在做小车的遥控器,用一块arduino+蓝牙(HC-06)做遥控器,小车那边是一块UNO+HC-06接收,然后驱动小车动作。

【问题的出现】
在测试遥控器代码的时候,用了一块Arduino Leonardo。结果蓝牙怎么也调不通。

蓝牙模块接法很简单,VCC,GND,RX,TX
其中RX,TX交叉接在板子的PIN1,PIN0(当然,下载程序的时候拔掉)

测试代码:
  1. char val;
  2. int ledpin=10;
  3. void setup()
  4. {
  5.   Serial.begin(9600);
  6.   while (!Serial) ;
  7.   pinMode(ledpin,OUTPUT);
  8. }
  9. void loop()
  10. {
  11.   val=Serial.read();
  12.   if(val=='r')
  13.   {
  14.     digitalWrite(ledpin,HIGH);
  15.     delay(500);
  16.     digitalWrite(ledpin,LOW);
  17.     delay(500);
  18.     Serial.println("OK");
  19.   }
  20. }
复制代码


期望的效果:从上位机(如平板)配对成功后,发送一个字符“r”,蓝牙模块收到----驱动LEDPIN高电位,点亮一只LED。
同时回送一个“OK”
但实际测试中,蓝牙配对成功,但测试没有得到预期效果,发送“r”后,无响应。

【问题的解决】
查阅官网资料后,看到这样一段说明:
The Arduino Leonardo board uses Serial1 to communicate via TTL (5V) serial on pins 0 (RX) and 1 (TX). Serial is reserved for USB CDC communication.

原来,Arduino Leonardo board 使用串口通信,必须用 Serial1 ,而 Serial是保留给USB通信的。
于是把代码中的 Serial全部改为 Serial1 。测试成功。

我看到坛子里有网友测试HC-06时不成功,恐怕和这个有关吧。
另外:
1、大家注意到了这句吗while (!Serial1) ;,在打开串口后,需要执行这句,等待串口真正打开,这也是 Arduino Leonardo特有的(UNO是不需要的),详见官网资料。
2、你要在Leonardo上玩软串口吗?注意:
Not all pins on the Leonardo support change interrupts,
so only the following can be used for RX:
8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
不是所有的pin都可以玩的。

希望对大家有所帮助,少走一点弯路。
回复

使用道具 举报

发表于 2014-2-26 23:39:12 | 显示全部楼层
好贴收藏,感谢分享
回复 支持 反对

使用道具 举报

发表于 2014-5-26 22:00:13 | 显示全部楼层
我想在这个板子上再建立另外一个串口,使用TTL转USB模块,即用来接收电脑的命令,其板子本身的usb口接一个下位机,那么这个TTL转USB模块与板子应该怎么连线?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-26 23:47:15 | 显示全部楼层
建议你可以考虑用蓝牙模块,接受PC命令。
回复 支持 反对

使用道具 举报

发表于 2014-5-27 19:07:37 来自手机 | 显示全部楼层
hc系列有可以直接控制io的蓝牙模块!有6个还是9个口能用!
回复 支持 反对

使用道具 举报

发表于 2014-6-6 23:14:22 | 显示全部楼层
用板子自带的RX,TX接收PC的命令是可以实现的,但是如果板子的USB口连接了下位机,这个下位机能认为板子是个鼠标吗?
回复 支持 反对

使用道具 举报

发表于 2014-6-9 07:28:40 | 显示全部楼层
谢谢楼主分享体会,这很帮助我们新手
回复 支持 反对

使用道具 举报

发表于 2015-4-2 22:22:37 | 显示全部楼层
了解了,谢谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2015-5-17 15:51:37 | 显示全部楼层
刚好帮了我解决问题
回复 支持 反对

使用道具 举报

发表于 2016-3-29 09:05:09 | 显示全部楼层
多谢楼主的分享  十分感谢
回复 支持 反对

使用道具 举报

发表于 2016-5-24 21:27:15 | 显示全部楼层
非常有用的提示,我一直没明白为什么在“Arduino Leonardo board中使用USB占用serial,用户要用serial1”这句话,看到这里,明白了!
回复 支持 反对

使用道具 举报

发表于 2016-9-24 11:31:48 来自手机 | 显示全部楼层
没错,我的DUE也是这样的,Serial是专门连电脑的,其他的Serial1 2 3都是可以连其他串口设备的
回复 支持 反对

使用道具 举报

发表于 2016-10-30 12:22:44 | 显示全部楼层
终于找到原因了,感谢分享!
回复 支持 反对

使用道具 举报

发表于 2017-5-10 19:22:52 | 显示全部楼层
我也碰到相同的问题 能加QQ交流下吗?
回复 支持 反对

使用道具 举报

发表于 2017-7-30 22:00:00 | 显示全部楼层
谢谢!!!终于明白了,折腾了一下午,用软串口连GSM模块可以,但直接连硬串口死都调不通,原来是这么回事啊
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 20:47 , Processed in 0.048166 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表