我通过Windows窗体应用程序将一个字节数组传递到arduino板上的bluesmirf uno中。我能够从蓝牙读取信号并通过串口输出,但输出总是254,我不知道为什么。
以下是C ++代码。
const int led = 8;
int incomingByte = 0;
#define RxD 10
#define TxD 11
#include <hmi.h>
SoftwareSerial mySerial(RxD, TxD); // RX pin, TX pin
void setup() {
pinMode(led, OUTPUT);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
Serial.begin(9600);
mySerial.begin(11520);
}
void loop() {
incomingByte = mySerial.read();
if(incomingByte > 0){
Serial.println("Here is: ");
Serial.println(incomingByte);
digitalWrite(led,HIGH);
}
}
这是相关的c#代码。
int MyInt = 1;
byte[] b = BitConverter.GetBytes(MyInt);
serialPort1.Write(b, 0, 4);
我能够使用c#代码输出代码248:
serialPort1.Write(new Byte[] { 1, 1, 1, 1 }, 0 , 4);
和192来自
byte[] b = { 0, 1, 1, 1, 1, 1, 1, 1 };
serialPort1.Write(b, 0, 7);
但是我不知道为什么,返回的数字似乎是基于字节数组中传递的元素数量,而不管数组中的实际内容是什么。
答案 0 :(得分:1)
您应该尝试降低波特率。 SoftwareSerial使用大量CPU,微控制器可能无法处理所有数据。
参考:https://arduino.stackexchange.com/a/30117/32059,http://forum.arduino.cc/index.php?topic=96271.0和http://forum.arduino.cc/index.php?topic=140299.msg1063344#msg1063344
答案 1 :(得分:0)
这个问题是随机修复的,而我正在抨击它。
我认为问题的解决方法是我将波特率设置为11520而不是115200,正如Gre_Gor所说。