c++与Arduino串行通信超时
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收到任何消息,您可以跟踪您已经循环了多长时间,并使用用户消息优雅地退出。
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- C++减少modbus_connect超时
- 混淆了如何使用IDL与Ethovision进行通信
- 没有超时的C++条件变量
- C++ Boost::asio串行通信与Arduino无法写入
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 如何在C++(VS2010)中设置超时读取USB端口?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- C++卷曲柱在curl_easy_perform超时
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 删除功能不适用于串行通信后多个循环中的多个实例
- 网站和C++程序在同一台 Linux PC 上的通信
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 串口读取功能的通信超时和线程不超时
- Modbus通信减少等待超时时间
- c++与Arduino串行通信超时