C++ Linux (Ubuntu) 正确写入串行(对于 Arduino)

2024-03-04

我想知道是否有一种标准方法可以与高效的串行设备进行通信。我应该使用标准库吗?如果有,是哪一个?

现在我正在摆弄让 LED 根据输入的数字以给定的量亮起。 (Arduino 代码如下)。只是练习一些东西。

看我过于简单且低效的测试:

#include <iostream>
#include <stdio.h>
using namespace std;

int
main()
{
  FILE *file;
  //Opening device file

  int getnum;

  while (true)
    {
      file = fopen("/dev/ttyACM5", "w");
      cout << ">>" << endl;
      cin >> getnum;
      fprintf(file, "%d", getnum); //Writing to the file
      fclose(file);
    }

}

while 循环很可爱,但如果允许在不等待用户的情况下运行,效率很低。我怀疑是多余的fopen fclose使用是愚蠢的。

微控制器将感测设备的状态并向计算机发送信号。计算机将对所有这些值进行“处理”,并发送回消息以改变arduino的行为。基本上,除了需要人工键盘输入之外,繁重的思考都被委托给了计算机。

当然这只是为了好玩,但是正如你所看到的,我需要“学习 C++ 中串行交互的规则”!非常感谢任何帮助或指导。


Arduino代码:

char incomingByte = 0;   // for incoming serial data
int led = 11;
int bright;
void
setup()
{
  Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps

}

void
loop()
{

  // send data only when you receive data:
  if (Serial.available() > 0)
    {
      // read the incoming byte:
      incomingByte = Serial.read();

      switch (incomingByte)
        {
      case '1':
        bright = 10;
        break;
      case '2':
        bright = 50;
        break;
      case '3':
        bright = 255;
        break;

      default:
        bright = 0;
        break;
        }

      analogWrite(led, bright);

      Serial.println(incomingByte);
    }
}

我想知道为什么这么长时间没有人回答这个问题。为什么说这是一种低效的方式?如果您指的是文件系统,它并不是在文件系统中创建物理文件。这实际上是正确的方法,只是不要在循环内打开和关闭文件描述符。如果您希望 Serial.read 读取单个值发送'\n', fprint (file, "%d\n", value).

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

C++ Linux (Ubuntu) 正确写入串行(对于 Arduino) 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 使用 OpenCv 检测 PC 上网络摄像头/摄像头的数量

    我正在制作一个运行多个网络摄像头 摄像机的应用程序 我无法检测到 OpenCV 拥有的网络摄像头数量 无法安排一个包含多个子网络摄像头的大显示窗口 有人可以帮我这个吗 我搜索过 openCV willowgarage 但失败了 thanks
  • Python线程传递参数

    我正在尝试将一些参数传递给服务器 但我不知道如何 这是我的代码 HOST PORT socket gethostbyname socket gethostname 31000 self server SocketServer Threadi
  • 通过html链接删除Django中的对象

    我有一个带有 Post 模型的项目 这是基本的帖子 我想在每个帖子页面上创建一个链接 以便能够删除该帖子 具有适当的安全性 关于堆栈溢出有一些问题 但我似乎找不到一个完整的 可行的答案 我使用的是 Django 1 7 当我实现它时不会抛出
  • 使用参数化类型重载方法

    只是想知道是否有一种方法可以使用参数化类型调用重载方法 例如定义以下对象 object Wrap def f x X println x called def f y Y println y called def f a Any print
  • 列出所有 PaperTrail 版本(包括关联)的最有效方法是什么?

    这个问题是关于宝石的纸迹 https github com airblade paper trail对于轨道 当仅关联发生变化时 不会为主模型创建版本记录 因此 列出某个记录 包括其关联 的所有版本的最有效方法是什么 查询应该类似于以下内容
  • 是否有 ruby​​ 一行“return if x”?

    有很多地方需要补充 if this flag return end 可以用 ruby 一行完成吗 有没有红宝石单线 return if x Yes return value if condition 我爱鲁比
  • 无法包含用于客户端幻灯片验证的 js 文件

    我安装了gem client side validations 运行bundle并运行rails g client side validations install 安装没有创建任何 js 文件 因此我创建了它们并将 HitHub 中的代码
  • 为什么 Android FireMonkey 应用程序中的控件不能跨越多列或多行?

    我有一个带有 GridPanelLayout 的 FireMonkey 应用程序 与客户端对齐 它有 6 列和 16 行 控件包括字形 编辑和按钮 TEdit 跨越多列 TButton 跨越多列和行 目前 控件全部与客户端对齐 当我在 Wi
  • 如何使用MAIL_FROM_ADDRESS?

    目前 我正在开发一项功能 要求应用程序向客户 用户发送电子邮件 发送电子邮件已经可以正常工作 但是 我希望隐藏 替换发件人的电子邮件 我以为MAIL FROM ADDRESS in env文件是我所需要的 但它没有给我我所期望的 这是我的
  • Uploadify 插件不调用 Java Servlet

    我刚刚开始使用 Uploadify flash 插件而不是标准 HTML UI 并遇到了下一个问题 当我单击 上传文件 链接时 会显示进度并出现 已完成 状态 但实际上 它没有发生任何事情 Java Servlet 不是从后端调用的 有上传
  • 将 UIButton 的背景颜色从白色动画变为红色

    我正在尝试制作一种颜色脉冲效果来动画背景颜色UIButton使其连续从一种颜色 白色 变为另一种颜色 红色 我正在尝试使用CABasicAnimation用于更改不透明度 但我也无法使其与颜色一起使用 CABasicAnimation th
  • 安全发送 PHP 从 iOS 获取信息

    情况是这样的 我有一个 iOS 应用程序 其中有一部分用户将信息输入到特定标签中 然后我根据用户给定的信息创建一个 URL 请求 并将其发送到我的 PHP 后端 URL 遵循以下结构 http www somewebsite com sen
  • Bazel 和 Gradle 有什么区别?

    谷歌刚刚开源的 https github com bazelbuild bazel它的构建工具Bazel https bazel build 这个工具和之前有什么区别Gradle https gradle org 它能做什么 Gradle
  • Open Shift Angular 8 应用程序内存不足问题

    我正在为 openshift Angular 8 应用程序使用 Modern Web App 映像 但应用程序因 npm build 内存不足问题而失败 错误日志 usr libexec s2i assemble 第 62 行 296 被杀
  • Subversion 分支重新整合

    当分支重新集成到主干时 该分支实际上已经死亡了吗 您可以在重新集成后对分支进行修改并稍后将其合并回主干吗 你可以从技术上做到这一点 你的分支没有死亡也没有禁用 但不建议在重新集成后从分支合并到主干 您可以在这里找到有关其原因的完整讨论 Su
  • 选择不同的列并按列的子集进行分组

    我正在使用 SQL Server 2008 我陷入了这个恶性循环DISTINCT and GROUP BY 我有以下虚拟表myTable ID Street City PostalCode ProjectID Date NameId 1 B
  • OpenCV C++ 中跟踪物体的背景扣除和光流

    我正在开发一个项目 使用背景扣除来检测感兴趣的对象 并使用 OpenCV C 中的光流来跟踪它们 我能够使用背景扣除来检测感兴趣的物体 我能够在单独的程序上实现 OpenCV Lucas Kanade 光流 但是 我陷入了如何将这两个程序合
  • iOS YTPlayerView 强制视频质量

    我目前正在使用iOS youtube player helper我们的应用程序中的库 有一个视图控制器 带有YTPlayerView它的宽高比为 16 9 这意味着它只占据屏幕的一部分 视频以中等格式加载 无论如何 我都无法使其以 720P
  • MongoDB 脚本基础知识 - 如何

    MongoDB 脚本的基础知识是什么 我认为剧本将以 js 我们使用它来运行它mongo try js 但如果我把 print db foo find in try js并使用mongo try js 它会说 MongoDB shell v
  • C++ Linux (Ubuntu) 正确写入串行(对于 Arduino)

    我想知道是否有一种标准方法可以与高效的串行设备进行通信 我应该使用标准库吗 如果有 是哪一个 现在我正在摆弄让 LED 根据输入的数字以给定的量亮起 Arduino 代码如下 只是练习一些东西 看我过于简单且低效的测试 include