Arduino-Android:持续数据传输

时间:2014-03-04 03:22:42

标签: android bluetooth arduino

我几天前刚开始使用Arduino编程,现在我想将电位计读数传输到移动设备。我正在使用Arduino Leonardo和Bluetooth Mate Silver以及以下代码来传输数据:

    #include <SoftwareSerial.h>  

int bluetoothTx = 2;  // TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3;  // RX-I pin of bluetooth mate, Arduino D3
int val;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
  Serial.begin(9600);  // Begin the serial monitor at 9600bps
  bluetooth.begin(115200);  // The Bluetooth Mate defaults to 115200bps
  bluetooth.print("$");  // Print three times individually
  bluetooth.print("$");
  bluetooth.print("$");  // Enter command mode
  delay(100);  // Short delay, wait for the Mate to send back CMD
  bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to 9600, no parity
  bluetooth.begin(9600);  // Start bluetooth serial at 9600
}

void loop()
{
  int val = analogRead(A0);

  if(bluetooth.available())  // If the bluetooth sent any characters
  {
    Serial.print(val);  
  }
  if(Serial.available())  // If stuff was typed in the serial monitor
  {
      bluetooth.print(val);
  }
  delay(1000);
  // and loop forever and ever!
}

我发现蓝牙连接已发布,没有任何错误,但我没有在移动设备上获取任何数据。我更改了代码(例如,在串行监视器上没有if语句/打印电位计数据并从串行监视器读取数据到传输到移动设备),如果我在串行监视器中输入任何值,我只能在移动设备中获取数据。如果有人能建议我解决它的可能解决方案,我将非常感激。

1 个答案:

答案 0 :(得分:0)

 if(bluetooth.available())  // If the bluetooth sent any characters
  {
    Serial.print(val);  
  }
  if(Serial.available())  // If stuff was typed in the serial monitor
  {
      bluetooth.print(val);
  }

这显然有两种方式打破:

  1. 您可以根据可用的无关输入数据生成输出。接收蓝牙应该触发串行监视器上电位器值的本地打印,或者为什么从串行监视器接收应该触发电位器值的蓝牙打印,这是没有明显原因的。

  2. 您正在检查串行和蓝牙可用()方法,但您永远不会读取字符。因此输入缓冲区可能会溢出。

  3. 可能你的最佳解决方案是简单地删除if语句并始终将值回显到循环中的两个输出,忽略输入 - 除非出于某些原因这些是重要的。