MeetAndroid与SoftwareSerial问题

时间:2014-10-06 11:55:01

标签: serial-port arduino amarino

我使用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);
}

1 个答案:

答案 0 :(得分:0)

我发现了问题,这与波特率有关。使用软件串口时,我必须使用较低的波特率(例如9600),否则一旦接收到多个字符,它将无法工作。由于amarino库一次发送多个库(例如发信号的开始和结束),因此在较慢的硬件上使用软件序列时会引起问题(比如我使用的Arduino Uno)。可能使用更好的硬件(Arduino Mega)来改变波特率是没有必要的。

此处提供了更改波特率的示例:

Receiving multiple chars at once with Software Serial

龙回答说:

在较慢的硬件上使用SoftwareSerial时,请使用低波特率(如9600)。另外,请确保将蓝牙板设置为较低的波特率。