c++与Arduino串行通信超时

Serial communication timeout in C++ with Arduino

本文关键字:通信 超时 Arduino c++      更新时间:2023-10-16

下面的代码是我用来从我的Arduino发送和接收信息的。我的问题是当Arduino第一次插入。从它读取挂起,因为命令没有返回任何东西,因为那里还没有任何东西,所以我的整个程序崩溃了。我如何添加超时到读取函数,这是arduino->ReadLine();,导致的问题?这样它会在一秒钟后继续运动吗?

#include "stdafx.h"
#include <iostream>
using namespace System;
using namespace System::IO::Ports;
int main(int argc, char* argv[])
{
    using namespace std;
    String^ portName;
    int baudRate=9600;
    portName="COM4";
    // Arduino settings.
    SerialPort^ arduino;
    arduino = gcnew SerialPort(portName, baudRate);
    // Open port.
    try
    {
        arduino->Open();
        {
            if (strcmp(argv[1],"-send")==0) {
                String^ command = gcnew String(reinterpret_cast<const char*>(argv[2]));
                if (String::Compare(command,"int6")==0) {
                    arduino->Write("^");
                }
                else
                    arduino->Write(command);
            }
            if(strcmp(argv[1],"-get")==0) {
                String^ command = gcnew String(reinterpret_cast<const char*>(argv[2]));
                arduino->WriteLine(command);
                String^ result = arduino->ReadLine();
                Console::Write(result);
            }
        }

设置arduino->ReadTimeout = duration_in_ms,然后捕获TimeoutException

除了超时之外,您的代码应该循环直到SerialPort的BytesToRead属性大于零

while (arduino->BytesToRead==0) {}

如果在预期的时间范围内没有从arduino收到任何消息,您可以跟踪您已经循环了多长时间,并使用用户消息优雅地退出。