总是从串口获得254

时间:2017-04-09 01:14:50

标签: c# c++ arduino

我通过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);

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

2 个答案:

答案 0 :(得分:1)

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

参考:https://arduino.stackexchange.com/a/30117/32059http://forum.arduino.cc/index.php?topic=96271.0http://forum.arduino.cc/index.php?topic=140299.msg1063344#msg1063344

答案 1 :(得分:0)

这个问题是随机修复的,而我正在抨击它。

我认为问题的解决方法是我将波特率设置为11520而不是115200,正如Gre_Gor所说。