我几天前刚开始使用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语句/打印电位计数据并从串行监视器读取数据到传输到移动设备),如果我在串行监视器中输入任何值,我只能在移动设备中获取数据。如果有人能建议我解决它的可能解决方案,我将非常感激。
答案 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);
}
这显然有两种方式打破:
您可以根据可用的无关输入数据生成输出。接收蓝牙应该触发串行监视器上电位器值的本地打印,或者为什么从串行监视器接收应该触发电位器值的蓝牙打印,这是没有明显原因的。
您正在检查串行和蓝牙可用()方法,但您永远不会读取字符。因此输入缓冲区可能会溢出。
可能你的最佳解决方案是简单地删除if语句并始终将值回显到循环中的两个输出,忽略输入 - 除非出于某些原因这些是重要的。