从串行端口

时间:2017-05-25 18:40:40

标签: c++ c serialization arduino-uno

我正在开发一个窗口的应用程序,它通过串口向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);

谁能告诉我发生了什么事。可能是一些简单但我无法看到问题的原因,谢谢。

1 个答案:

答案 0 :(得分:0)

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

long scadaAnalogVal;

ParseInt documentation