C#与Arduino通过蓝牙通信,收到奇怪数据

Comunication between C# and Arduino via bluetooth, receiving strange data

我正在尝试通过蓝牙在 Arduino Mega 和 C# windows 表单应用程序之间发送数据。

从 Arduino 到 C# 一切顺利,但是,当从 C# 发送到 Arduino 时,我得到一些奇怪的值: 发送“abcde”输出 79 167 186 170 2. 我假设每个值代表一个字母,因为只发送“a”输出 79.

但是,我不明白为什么我得到这个值而不是 ascii 值,例如。

这是相关的 C# 代码:

if (serialPort1.IsOpen) serialPort1.Close();
serialPort1.PortName = "COM" + x.ToString();
serialPort1.BaudRate = 9600;
try
{
    if (!serialPort1.IsOpen) serialPort1.Open();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived);
 

每秒调用一个函数,dataToSend "abcde",例如:

private void DataSender(string dataToSend)
{
    serialPort1.Write(dataToSend);
    //MessageBox.Show(dataToSend);
}

以及所有 Arduino 代码(我使用的是具有 4 个串行端口的 Arduino Mega):

void setup() {
  Serial.begin(9600);
  Serial3.begin(9600);
}

void loop() {
  if (Serial3.available() > 0) {
    delay(10);
    int x = Serial3.read();
    delay(10);
    Serial.println(x);
  }
}

我尝试添加延迟以查看是否可以更好地获取数据,但是没有用。任何想法我在这里缺少什么?我认为这与数据加密发送的方式有关,但我不知道。

您的 Serial.println(x); 似乎是作为 ASCII 编码的十进制打印,我相信这是该方法的标准行为。

不幸的是,我目前无法复制这个问题,但我相信使用 Serial.readString(x) 而不是 Serial.read() 可能会解决这个问题。

数据通过串口发送时没有加密,它只是作为明文字节发送,接收方知道如何对它们进行编码。

参见:https://www.arduino.cc/reference/en/language/functions/communication/serial/readstring/

来自我下面的评论。 此外,可能值得将字符串作为字节数组 byte[] bytes = Encoding.ASCII.GetBytes(dataToSend); 发送并通过线路发送字节数组。这样就没有问题关于你使用的是什么编码

如果有人遇到和我一样的问题,那我的问题是电路板过载了。我连接了 6 个超声波传感器以及其他一些东西。当我更换他们的电源时,它开始按预期工作。