C++ ifstream从linux到arduino

2023-11-29

原始代码

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    ofstream arduino_output("/dev/ttyACM0");
    ifstream arduino_input("/dev/ttyACM0");

    int value;
    string txt;

    while(cin >> value){
        arduino_output << value << endl;
        arduino_input >> txt;//I never recieve the "OK" (Which I should get)
        cout << txt;
    }

    arduino_input.close();
    arduino_output.close();
    return(0);
} 

问题是这样的:

        cin >> value;
        arduino_output << value << endl;
        arduino_input >> txt;//I never recieve the "OK" (Which I should get)
        cout << txt;

但如果我这样做,它会起作用:

        cin >> value;
        arduino_output << value << endl;

        for(int i=0;i<10000;++i)
        for(int j=0;j<10000;++j){ //Waste a lot of time
           ++value;
           --value;
        }

        arduino_input >> txt; //I always recieve the "OK"
        cout << txt; //I can see the "OK"

那么如何让我的快速计算机能够读取 arduino 的慢速输出呢? (不使用for循环浪费时间)

这里说了一些关于回调的事情http://www.cplusplus.com/reference/ios/ios_base/register_callback/但我永远无法让它发挥作用。它说它支持 3 个事件,但没有一个是:“如果输入缓冲区不为空,则调用此函数”。

因为最终的解决方案是输入缓冲区不为空时的回调函数。

可接受的解决方案是 arduino 版本“Serial.available()”的 C++ 等效版本。

另一个可接受的解决方案是任何迫使我不依赖两个 for 循环的解决方案。如果您这么想的话,3 个 for 循环是不可接受的。

EDIT1:显示原始代码
编辑2:我正在使用linux(lubuntu)
EDIT3:有人对代码的编写位置感到困惑。奇怪的。


如果您的 arduino 板已连接 - 例如通过一些电缆连接到 Linux 笔记本电脑和 C++ 程序在Linux端(所以not在 Arduino 微控制器上运行,您在其中进行了编程独立式C),你会更好直接使用系统调用(2)和低级IO(不是 C++ifstream这增加了一些缓冲)例如open(2) & read(2) & write(2) & close(2).

Read 高级Linux编程。考虑使用术语(3)也许设置你的tty(揭秘here)在原始模式下。使用poll(2)复用(并等待)输入(或输出能力),例如喜欢Serial.available()在Arduino内部做。

一些事件循环库(例如libevent or libev)提供回调,但您可以创建自己的事件循环poll.

要延迟一些时间,请使用睡觉(3)(但很可能,你需要poll反而)。

附言。如果您的 Linux 应用程序是一个图形应用程序,使用一些 GUI 工具包,例如Qt or GTK,你应该使用事件循环由该工具包提供(该循环正在调用poll or select, ETC...)。顺便说一句,您的问题实际上与 Arduino 无关,而是与串行端口相关(插入同一串行端口的任何其他设备都会出现相同的问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ ifstream从linux到arduino 的相关文章

随机推荐

  • 如何使用 Ruby 生成 WSDL?

    我开始使用 Ruby 和 Soap 并有一些问题 如何为我创建的服务生成 WSDL 文件 它与 NET 客户端兼容吗 begin class MyServer lt SOAP RPC StandaloneServer Handler met
  • VB.Net:程序声明中的方括号[参数]是什么意思? [复制]

    这个问题在这里已经有答案了 我找到了这个子声明 Private Sub ReceivedText ByVal text As String input from ReadExisting If Me lblStatus InvokeRequ
  • 使用 jQuery AJAX 加载 php 内容

    我的问题 我有index html
  • VBscript - “系统找不到指定的文件”

    我正在尝试编写一个简短的 VBScript 它会打开 calc exe 和 wordpad exe 问题是 VBScript 不允许我打开 wordpad exe 我尝试以管理员身份运行该脚本 但这没有帮助 我的脚本如下所示 Set Wsh
  • 使用 jQuery 获取文件输入的选定文件名(不带路径)

    我用过这个 input type file val 获取选定的文件名 但它返回完整路径 如 C fakepath filename doc fakepath 部分实际上在那里 不确定它是否应该在那里 但这是我第一次使用文件上传的文件名 我怎
  • 在 JSfiddle 中添加图像 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想创建一个小提琴 在其中我必须添加图像 作为 div 的背景图像 我尝试使用左侧的添加资源 但它不起作用 我还尝试在我的文件夹结构中提供图像的完整路径 但这也不起作用 有人知道该怎
  • 在Python中从矩阵中选择列向量

    我想在 Python numpy 中的矩阵中索引列向量 并将其作为列向量而不是一维数组返回 x np array 1 2 3 4 x 1 gt array 2 4 Giving np transpose x 1 不是一个解决方案 继nump
  • 在 R 中绘制多项式回归曲线

    我有一个简单的多项式回归 如下所示 attach mtcars fit lt lm mpg hp I hp 2 现在 我绘制如下 gt plot mpg hp gt points hp fitted fit col red pch 20 这
  • Flash & Flex SDK/AS3 - 如何保持键盘焦点?

    我正在 Flex AS3 中编写 Flash 应用程序 但我似乎无法为其分配键盘焦点 我在开发初期就注意到了这个问题 并添加了一个带有 立即播放 按钮的启动屏幕 以吸引用户点击 但是 用户必须在应用程序上再次单击才能使键盘正常工作 更糟糕的
  • 如何在 Qt 项目中包含库

    我正在尝试创建一个使用 TagLib 库的项目 我不太确定到底该怎么做 我已经下载了标签库 1 11 1 我构建它如下 构建 zlib 首先让 CMake 创建一个 Visual Studio 解决方案文件 然后使用 Visual Stud
  • 使用访问器将属性设置为新分配的对象会导致内存泄漏

    我只是想确认以下是否会导致内存泄漏 h file property nonatomic retain MyObject foo m file synthesize foo self foo MyObject alloc init deall
  • ArrayList .get 比 HashMap .get 快吗?

    我本来以为HashMap随机访问单个值的速度比ArrayLists 也就是说 HashMap get key 应该比ArrayList get index 仅仅因为ArrayList必须遍历集合的每个元素才能达到其值 而HashMap才不是
  • ject() 必须从注入上下文中调用

    我正在尝试将我的 Angular 应用程序导出为 npm 模块以供其他应用程序使用 但遇到了一些困难 我在互联网上的其他地方找不到这个错误 我已经无能为力了 我按照这个教程进行操作 https medium com nikolaslebla
  • 为什么 Azure Bot Service Slack 连接器不转发事件和交互式消息?

    更新 2020 年 6 月 30 日 经过更多测试后 我获得了一些详细信息 可以帮助其他人识别我的问题 问题似乎是 Slack 正在将数据发送到 Azure Bot 服务 但该数据没有转发到我的代码 我已经能够毫无问题地使用机器人模拟器 并
  • IP 地址“::1”是什么?

    我正在没有网络连接的本地计算机上使用套接字 见下文 IPAddress address IPAddress Any doesn t work IPAddress address IPAddress Parse 1 works 那么到底是什么
  • 根据购物车总金额的百分比支付押金

    我从另一篇文章中获取了这段代码 基本上根据我的理解 这段代码试图强制购物车价格更改为 40 美元的固定金额 并将其作为预订费收取 我想要做的是强制购物车金额为购物车中所有产品总和的 20 我的网站是为了预订 所以我只想收取押金然后让他们在使
  • Woocommerce 3 中的自定义结账字段和运输方式 ajax 交互

    这个问题很快就会让我去邮寄 在 Woocommerce Checkout 中 我需要在地址中添加自定义字段 这个额外的字段用于function calculate shipping package array 现在显然 woocommerc
  • IOS - 无法以编程方式打开 Whatsapp 聊天,但可以通过 HTML 来打开

    我有一个网页 其锚点包含 href whatsapp xxxxxxxxx 如果我在 iPhone iOS 9 上单击它 它会在该联系人的聊天视图中打开 WhatsApp 我可以看到所有我与联系人进行的聊天 但是 如果我以编程方式执行此操作
  • RewriteRule - html 损坏 - 就像缺少 css

    我对这个规则有疑问 RewriteRule d more php books 1 tags 2 L 执行此规则后 一切正常 但页面显示不正确 就像缺少CSS一样 提前致谢 当您有 CSS 文件的相对 URL 时 可能会发生这种情况 如果您访
  • C++ ifstream从linux到arduino

    原始代码 include