繁体   English   中英

串口通讯Arduino,C ++

[英]Serial port communication Arduino, C++

好的,我遇到了问题。 我正在编写使用Microsoft Flight Simulator X SDK和Arduino的程序。 该应用程序应该通过串行端口将数据发送到arduino板,而我正在使用以下功能:

http://playground.arduino.cc/Interface/CPPWindows

该程序可以正常运行,只是它突然停止工作。 该程序是一个while(1)循环,它连续执行向模拟器请求数据的功能,然后通过串行发送字符串。 这就是我调用函数WriteData的方式:

WriteData((char *)cadena.c_str(),8);

作为cadena ,我正在发送的字符串。 函数WriteData是这样的:

bool Serial::WriteData(char *buffer, unsigned int nbChar)
{
    DWORD bytesSend;
    //Try to write the buffer on the Serial port
    if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0))
    {
        //In case it don't work get comm error and return false
        ClearCommError(this->hSerial, &this->errors, &this->status);

        return false;
    }
    else
        return true;
    }

我已经看到,如果我对整个if-else注释,那么就不会调用函数WriteFile ,该程序不会停止工作并可以完美运行(除了信息未发送到Arduino的事实)。 如果执行了该行,则程序将在一分钟左右后停止。 而且停止不意味着崩溃或任何事情,我只是意味着它停止了,控制台仍然在其中存储所有消息,只是停止了工作。

可能会发生什么?

编辑:好的,arduino还连续发送程序从未读取过的数据,这可能是一个问题吗? 可能是缓冲区已满,而WriteFile正在等待在其上写空间吗?,因为知道我没有写序列,所以看起来工作得很好...

当发送缓冲区已满时,WriteFile()将停止。 仅当您注意正确设置握手时,它才会为空。 无论是电气上,还是连接DSR和CTS信号,这在Arduino上往往会被跳过。 或通过禁用握手SetCommState()函数。 使用SetCommTimeouts()设置超时是增加一些最小错误恢复的另一种不错的策略。

不读取Arduino发送的数据也不会得分很多。 当然,最好以增量方式实施此操作,以便您一次可以专注于解决一个问题。 但是,它通常不会阻止PC发送数据,以握手接线错误为模。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM