gpt4 book ai didi

C++ Boost::asio与Arduino的串行通信无法写入

转载 作者:行者123 更新时间:2023-12-02 10:36:04 25 4
gpt4 key购买 nike

我尝试使用 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 正在重新启动。当我添加一个线程 sleep 例如 5 秒,然后重新发送它工作的数据(因为它使串行连接保持事件状态)。我仍在寻找一个永久的解决方案,这样在我真正想写东西之前我就不必写了。

更新 2:

显然我什至不需要写,但是在我开始写之前必须有一个小的延迟,因为在打开端口后 Arduino 仍在重新启动。

最佳答案

我在写入串行端口之前添加了一个小的延迟来修复它。正如我在上面的评论中所写的那样,当您开始串行通信时,Arduino 正在重新启动。

这可以通过多种方式禁用:https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection/

另一种选择是从 Arduino 发送“就绪”信号,以便在您的应用程序中知道 Arduino 已重新启动。因此,然后在您的应用程序中开始阅读,当您收到该消息时,您就可以开始写作了。

关于C++ Boost::asio与Arduino的串行通信无法写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60239582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com