使用Arduino在C ++中进行串行通信超时

时间:2011-04-19 23:32:17

标签: c++ serial-port arduino

以下代码是我用来发送和接收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);
            }
        }

2 个答案:

答案 0 :(得分:2)

设置arduino->ReadTimeout = duration_in_ms,然后抓住TimeoutException

答案 1 :(得分:0)

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

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

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