C++ Boost::asio串行通信与Arduino无法写入
C++ Boost::asio serial communcation with Arduino can't write
我尝试使用Boost Asio库与Arduino Uno进行通信。不知何故,我无法将数据发送到我的Arduino,而且我不知道我做错了什么。阅读工作正常,但写作只有在我打开终端并说:
cat /dev/ttyACM0
当此终端窗口打开时,我运行我的C++应用程序,它可以工作,否则它不起作用。
测试应用程序代码(C++(:
#include <iostream>
#include <boost/asio.hpp>
char* message;
int main()
{
boost::asio::io_service ioservice;
boost::asio::serial_port serial(ioservice, "/dev/ttyACM0");
serial.set_option(boost::asio::serial_port_base::baud_rate(115200));
serial.set_option(boost::asio::serial_port::flow_control(boost::asio::serial_port::flow_control::none));
serial.set_option(boost::asio::serial_port::parity(boost::asio::serial_port::parity::none));
serial.set_option(boost::asio::serial_port::stop_bits(boost::asio::serial_port::stop_bits::one));
serial.set_option(boost::asio::serial_port::character_size(boost::asio::serial_port::character_size(8)));
std::string s = "u";
boost::asio::streambuf b;
std::ostream os(&b);
os << s;
boost::asio::write(serial, b.data());
if (serial.is_open()) {
serial.close();
}
return 0;
}
我的Arduino应用程序的代码:
#include "Servo.h"
Servo servo;
void setup() {
Serial.begin(115200);
servo.attach(9);
servo.write(0);
}
void loop() {
if(Serial.available()) {
char c = Serial.read();
if(c == 'u') {
servo.write(180);
} else if (c == 'v') {
servo.write(0);
}
}
}
我在 Ubuntu 18.04 和 Debian 10 安装上都尝试了这个,以排除权限问题,所以我认为我的代码有问题。
更新:
我发现了问题,Arduino在进行串行连接时正在重新启动。例如,当我添加一个线程睡眠 5 秒,然后重新发送数据时,它会工作(因为这样它会保持串行连接的活动(。我仍在寻找一个永久的解决方案,这样我就不必在我真正想写东西之前写东西。
更新 2:
显然我什至不必进行写入,但是在我开始写入之前必须有一小段延迟,因为打开端口后Arduino仍在重新启动。
我在写入串行端口之前通过添加一个小延迟来修复它。正如我在上面的评论中所写的那样,当您开始串行通信时,Arduino正在重新启动。
可以通过多种方式禁用此功能:https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection/
另一种选择是从Arduino发送"就绪"信号,以便在您的应用程序中知道Arduino已重新启动。因此,然后在您的应用程序中从阅读开始,当您收到该消息时,您就可以开始编写了。
相关文章:
- C++ Boost::asio串行通信与Arduino无法写入
- 通过USB在PC和Arduino之间进行串行通信
- Python-Arduino USB通信浮点错误
- 电位计与第二个 Arduino 板的通信状态
- 通过串行通信将数据从Arduino发送到Pi
- QT 中的串行通信超时与 Arduino
- Arduino和CPP文件通信
- 覆盆子Pi(QT C )和Arduino(Arduino IDE)之间的通信
- SPI 通信树莓PI Arduino
- Arduino蓝牙通信
- Arduino和Visual Studio C ,2方式串行通信
- Arduino到PC蓝牙通信
- 来自第三方平台的Arduino串行通信
- C++与ARDUINO的串行通信
- c++和arduino之间的串行通信
- PC和Arduino之间的串行通信
- Q与Arduino通信时出现串行错误
- 如何最大限度地减少来自 arduino 的串行通信读取错误
- 如何使用Arduino开始与完成的硬件进行编程/通信
- 使用 Linux 与 Arduino 通信