簡體   English   中英

帶有Arduino的C ++中的串行通信超時

[英]Serial communication timeout in C++ with 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);
            }
        }

設置arduino->ReadTimeout = duration_in_ms ,然后捕獲TimeoutException

除了超時外,您的代碼還應循環執行,直到SerialPort的BytesToRead屬性大於零為止

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

如果在預期的時間內沒有收到來自arduino的任何信息,則可以跟蹤循環的時間並通過用戶消息正常退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM