Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Тайм-аут последовательной связи в C++ с Arduino

Автор вопроса: user541597Ответов: 2

Код ниже - это то, что я использую для отправки и получения информации от моего 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);
            }
        }

c++arduinoserial-port

Ответы

Ответ 1 · рейтинг 2 · Ben Jackson

Установите arduino->ReadTimeout = duration_in_ms, а затем поймайте TimeoutException.

Ответ 2 · Visual Micro

В дополнение к тайм-ауту ваш код должен зацикливаться до тех пор, пока свойство BytesToRead SerialPort не станет больше нуля.

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

Вы можете отслеживать, как долго вы зацикливались, и изящно выйти с пользовательским сообщением, если от arduino ничего не получено в течение ожидаемого периода времени.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы