C# 始终从串行端口获取254

C# 始终从串行端口获取254,c#,c++,arduino,C#,C++,Arduino,我正在通过windows窗体应用程序将一个字节数组传递到arduino板上的bluesmirf uno中。我能够从蓝牙读取信号并通过串行打印出来,但输出总是254,我不知道为什么 下面是C++代码。< /P> const int led = 8; int incomingByte = 0; #define RxD 10 #define TxD 11 #include <hmi.h> SoftwareSerial mySerial(RxD, TxD); // RX pin, TX

我正在通过windows窗体应用程序将一个字节数组传递到arduino板上的bluesmirf uno中。我能够从蓝牙读取信号并通过串行打印出来,但输出总是254,我不知道为什么

下面是C++代码。< /P>

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代码将代码输出到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);

但我不知道为什么,返回的数字似乎是基于字节数组中传递的元素数,而不管数组中实际是什么。

您应该尝试更低的波特率。SoftwareSerial使用了大量CPU,微控制器可能无法处理所有数据


参考文献:,和

当我正在努力解决这个问题时,这个问题是随机解决的


我想问题的解决办法是我将波特率设置为11520,而不是格雷戈尔所说的115200。

串行端口的字大小是多少位?我不知道,我该如何检查?也就是说,因为它是254,我想它是8。我的想法是,我从来没有使用过Arduinos,但听起来好像你在某个地方有一个不可靠的连接,这意味着你的串行链接抛出了它的最大值2^8减去2奇偶校验位,但我可能是错的。11520不是一个明智的波特率选择,考虑115200个。254是0B11111110,248是11111,000,192是11000000。我觉得波特率有问题。你确定双方的波特率一致吗?11520看起来像个打字错误。115200在串行软件上被认为是不可靠的。
byte[] b = { 0, 1, 1, 1, 1, 1, 1, 1 };
serialPort1.Write(b, 0, 7);