2017-05-25 59 views
0

我正在开发一个窗口应用程序,通过串口向Arduino发送和接收数据。从串口发送和接收int值

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

如果我想发送int值,那么我只能在arduino中收到一个整数,如果我发送的整数48到57给出的int值是0到9,它们是小数48到57的ASCII字符,奇怪的。例如57,Arduino的似乎挑这个向上为9为ASCII 57.

下面

炭值在窗口程序和阿尔杜伊诺

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的挑选数据高达OK

的Arduino代码:

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

谁能告诉我这是怎么回事。可能有些简单但我不明白问题是什么,谢谢。

回答

0

Arduino parseInt()方法在Arduino架构中有一个返回类型(32位)的long。我想你应该改变你的Arduino代码:

long scadaAnalogVal; 

ParseInt documentation

+0

试过,仍然得到了同样的问题 –

+0

不知道还有什么,而不用复制整个实验建议。我的回答值得赞赏,但是(不是接受),因为它至少纠正了返回值的类型。 ;)当使用不同的处理器架构时,这很重要。 – TomServo