【发布时间】:2021-10-15 07:39:18
【问题描述】:
我正在尝试通过蓝牙在 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);
}
}
我尝试添加延迟以查看是否可以更好地获取数据,但没有奏效。有什么想法我在这里想念的吗?我认为这与加密发送数据的方式有关,但我不知道。
【问题讨论】:
-
'a'的代码点是 97,而不是 79。 -
我知道,我以为可能是颠倒了,但其他字母也没有检查出来。
-
假设您可以从字节数组写入串行端口,请尝试发送
new byte[] {97, 98, 99, 100, 101}而不是字符串,看看会发生什么。 -
忘记我之前说的吧,我刚试过这个,然后......它显示相同的数字,79 167 186 170 2。所以我猜是 Arduino 翻译错误了?
-
改用
Serial.write(x);。此外,延迟没有帮助,您可以删除它们。
标签: c# winforms arduino serial-port communication