向串行端口发送和接收 int 值

Sending and receiving int value to/from serial port

本文关键字:int 串行端口      更新时间:2023-10-16

我正在开发一个窗口的应用程序,该应用程序通过串行端口向Arduino发送和接收数据。

我遇到的问题是当我尝试将 int 值发送到串行端口并在 Arduino 程序中拾取它时。我正在使用窗口程序中的WriteFile()来发送int并使用Serial.parseInt()在Arduino中拾取它。当我发送字符值时,我可以毫无问题地拾取它们。

如果我想发送 int 值,我唯一一次在 arduino 中收到整数是如果我发送整数 48 到 57,这给了我一个 0 到 9 的整数值,这是十进制 48 到 57 的 ASCII 字符,很奇怪。 例如 57,Arduino 似乎将其拾取为 9,这是 ASCII 57 的字符值。

下面是Windows程序和Arduino中的代码

C++代码:

DWORD ComPort::WriteAnalogData(int *buffer)
{
if (!connected)
return 0;
DWORD bytesSent;
DWORD errors;
if (!WriteFile(hCom, (void *)buffer, sizeof(buffer), &bytesSent, 0))
ClearCommError(hCom, &errors, NULL);    // If it fails, clear com errors
else return bytesSent;      // Return the number of bytes sent
return 0;                   // Or return 0 on failure
}

写入 int 后的返回值(bytesSent) 是 4,所以我认为这个函数可以工作。我有一个类似的功能来发送单个字节的数据,它可以正常工作,Arduino可以正常地拾取数据

Arduino 代码:

int scadaAnalogVal;
scadaAnalogVal = Serial.parseInt();
digitalWrite(scadaAnalogVal,HIGH);

谁能告诉我发生了什么。可能很简单,但我看不出问题是什么,谢谢。

Arduino parseInt() 方法在 Arduino 架构中具有返回类型(32 位)。 我认为您应该将Arduino代码更改为:

long scadaAnalogVal;

ParseInt 文档