我使用Amarino和SoftwareSerial(来自这里:http://www.double-oops.org/mini-blog/amarinowithsoftwareserial),但我有一个奇怪的问题。 似乎MeetAndroid库中存在一些奇怪的行为。为了接收事件,我必须做出这些改变:
在init()中我不得不改变
ack = 19;
带
ack = 226;
因为这是我在邮件末尾从手机收到的字幕
并且在receive()中我不得不改变
uint8_t lastByte;
与
char lastByte;
否则
if(lastByte == ack)
永远不会成真
有谁知道为什么我遇到这个问题?为什么我得到另一个ack char,为什么不能用于char(ack)和uint8_t(lastByte)
这是我的草图:
/*
Receives Test Events from your phone.
After it gets a test message the led 13 will blink
for one second.
*/
#include <MeetAndroid.h>
#include <SoftwareSerial.h>
MeetAndroid meetAndroid(4, 2, 115200);
int onboardLed = 13;
void setup()
{
meetAndroid.registerFunction(testEvent, 'A');
pinMode(onboardLed, OUTPUT);
digitalWrite(onboardLed, HIGH);
}
void loop()
{
meetAndroid.receive(); // you need to keep this in your loop() to receive events
}
void testEvent(byte flag, byte numOfValues)
{
flushLed(300);
flushLed(300);
}
void flushLed(int time)
{
digitalWrite(onboardLed, LOW);
delay(time);
digitalWrite(onboardLed, HIGH);
delay(time);
}
答案 0 :(得分:0)
我发现了问题,这与波特率有关。使用软件串口时,我必须使用较低的波特率(例如9600),否则一旦接收到多个字符,它将无法工作。由于amarino库一次发送多个库(例如发信号的开始和结束),因此在较慢的硬件上使用软件序列时会引起问题(比如我使用的Arduino Uno)。可能使用更好的硬件(Arduino Mega)来改变波特率是没有必要的。
此处提供了更改波特率的示例:
Receiving multiple chars at once with Software Serial
龙回答说:
在较慢的硬件上使用SoftwareSerial时,请使用低波特率(如9600)。另外,请确保将蓝牙板设置为较低的波特率。