[英]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.