我正在开发一个窗口的应用程序,它通过串口向Arduino发送和接收数据。
我遇到的问题是当我尝试将一个int值发送到串口并在Arduino程序中获取它时。我在窗口的程序中使用WriteFile()
来发送int并使用Serial.parseInt()
在Arduino中获取它。当我发送char值时,我可以毫无问题地接收它们。
如果我想发送int值,我唯一一次在arduino中收到一个整数就是如果我发送整数48到57,它给我一个0到9的int值,这是小数48到57的ASCII字符,很奇怪。例如57,Arduino似乎把它选为9,这是ASCII 57的char值。
下面是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);
谁能告诉我发生了什么事。可能是一些简单但我无法看到问题的原因,谢谢。
答案 0 :(得分:0)
Arduino parseInt()方法在Arduino架构中有一个 long 返回类型(32位)。我认为您应该将您的Arduino代码更改为:
long scadaAnalogVal;