|
本帖最后由 沧海笑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都可以玩的。
希望对大家有所帮助,少走一点弯路。 |
|