【发布时间】:2016-01-17 18:44:06
【问题描述】:
我正试图弄清楚我应该如何在 Linux C++ 中使用串行通信读取/写入我的 Arduino。目前我正在尝试从我的 Arudino 读取我“触发”的回复
echo "g" > /dev/ttyACM0"
我尝试使用以下命令在终端中查看我的 Arduino 的响应:
tail -f /dev/ttyACM0
这是正常工作的。现在我想在 C++ 应用程序中做同样的事情。所以我做了这个测试
void testSerialComm()
{
std::string port = "/dev/ttyACM0";
int device = open(port.c_str(), O_RDWR | O_NOCTTY | O_SYNC);
std::string response;
char buffer[64];
do
{
int n = read(device, buffer, sizeof buffer);
if (n > 0) {
response += std::string(buffer);
std::cout << buffer;
}
} while (buffer[0] != 'X'); // 'X' means end of transmission
std::cout << "Response is: " << std::endl;
std::cout << response << std::endl;
close(device);
}
在几条“消息”之后,传输变得有点混乱。我的测试应用程序以随机顺序写入响应字符,但有些地方不对。我尝试通过以下命令配置 /dev/ttyACM0 设备:
stty -F /dev/ttyUSB0 cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
没有骰子。有人可以帮助我了解如何在 C++ 中与我的 Arduino 进行通信吗?
【问题讨论】:
-
ftell()的结果是什么? -
我以前用过boost serial。快速简单。
-
所以你应该对这个错误返回做出某种反应,检查
errno到底出了什么问题。 -
您无法在 tty 上搜索,这是您问题的很大一部分。而不是预先知道数据有多大,您必须继续阅读,直到到达数据的末尾。
-
那么,你打算如何沿着字符设备寻找呢?这有点不可能