沧海笑1122 发表于 2014-2-26 23:06:47

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

本帖最后由 沧海笑1122 于 2014-2-26 23:19 编辑

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

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

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

测试代码:
char val;
int ledpin=10;
void setup()
{
Serial.begin(9600);
while (!Serial) ;
pinMode(ledpin,OUTPUT);
}
void loop()
{
val=Serial.read();
if(val=='r')
{
    digitalWrite(ledpin,HIGH);
    delay(500);
    digitalWrite(ledpin,LOW);
    delay(500);
    Serial.println("OK");
}
}


期望的效果:从上位机(如平板)配对成功后,发送一个字符“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都可以玩的。

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

isilcala 发表于 2014-2-26 23:39:12

好贴收藏,感谢分享

ken0137 发表于 2014-5-26 22:00:13

我想在这个板子上再建立另外一个串口,使用TTL转USB模块,即用来接收电脑的命令,其板子本身的usb口接一个下位机,那么这个TTL转USB模块与板子应该怎么连线?

沧海笑1122 发表于 2014-5-26 23:47:15

建议你可以考虑用蓝牙模块,接受PC命令。

maxims 发表于 2014-5-27 19:07:37

hc系列有可以直接控制io的蓝牙模块!有6个还是9个口能用!

ken0137 发表于 2014-6-6 23:14:22

用板子自带的RX,TX接收PC的命令是可以实现的,但是如果板子的USB口连接了下位机,这个下位机能认为板子是个鼠标吗?

PPeach 发表于 2014-6-9 07:28:40

谢谢楼主分享体会,这很帮助我们新手

keeping_GD 发表于 2015-4-2 22:22:37

了解了,谢谢楼主分享

beian10 发表于 2015-5-17 15:51:37

刚好帮了我解决问题:lol

kaizhiyu 发表于 2016-3-29 09:05:09

多谢楼主的分享十分感谢

liyanzong 发表于 2016-5-24 21:27:15

非常有用的提示,我一直没明白为什么在“Arduino Leonardo board中使用USB占用serial,用户要用serial1”这句话,看到这里,明白了!:victory:

逆天子 发表于 2016-9-24 11:31:48

没错,我的DUE也是这样的,Serial是专门连电脑的,其他的Serial1 2 3都是可以连其他串口设备的

lyushao 发表于 2016-10-30 12:22:44

终于找到原因了,感谢分享!

Vast 发表于 2017-5-10 19:22:52

我也碰到相同的问题 能加QQ交流下吗?

oblivio 发表于 2017-7-30 22:00:00

谢谢!!!终于明白了,折腾了一下午,用软串口连GSM模块可以,但直接连硬串口死都调不通,原来是这么回事啊
页: [1]
查看完整版本: 【体会分享】Arduino Leonardo board使用 serial的几点注意事项