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 个超声波传感器以及其他一些东西。当我更换他们的电源时,它开始按预期工作。
我正在尝试通过蓝牙在 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 个超声波传感器以及其他一些东西。当我更换他们的电源时,它开始按预期工作。