问题标签 [arduino-c++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
113 浏览

arduino - 在进入 void 循环之前等待输入消息

如何在草图开始 void 循环之前等待 arduino 代码中的输入消息

我试过使用 while (!Serial.available())

我想暂停代码,直到收到“开始”消息。

0 投票
1 回答
71 浏览

arduino - 如何修复数字阅读

所以我的问题是,在两次读取数字引脚 6,7 之后,由于某种原因,引脚永远保持打开状态,这是我的代码。我似乎无法找到为什么会发生我试图添加一些延迟(x);但这没有帮助.. 5号针从来没有发生过,这对我来说更奇怪...任何帮助将不胜感激

0 投票
0 回答
1331 浏览

arduino - 在 arduino 上通过串行通信运行非阻塞步进器

我想同时驱动多达 10 个步进电机。所有这些都具有恒定但单独的速度。同时还要进行其他计算和数据传输。

所有步进器都有自己的带有 dir/step pin 的驱动程序。我将 AccelStepper 用于非阻塞功能来运行步进器。步进器尽可能平稳地运行非常重要。首先,我只是将每个步进器的 runSpeed 函数放在主循环中,导致当 arduino 将数据写入串行时出现卡顿。我现在使用 Mega 的 Timer5 来运行一个函数,该函数除了每 200 µs 左右调用一次所有 runSpeed 函数外什么都不做。这对步进器和除串行通信外的其余代码非常有效。我想向 arduino 发送命令,但由于中断处于活动状态,一些字节永远不会到达 arduino。现在我正在发送一个通知字节,数据将被传输,arduino 应答并停止中断,接收命令并再次启动中断。除了中间的 0.5 秒步进暂停之外,它就像一个魅力。这是要解决的。

现在我想到了以下几点: 1. 使中断可采用。方法:跟踪每个电机上的所有步骤并计算电机何时必须执行下一步。在那个时间进行定时器中断。当然,在任何电机的每一步之后都必须调整中断。我担心计算的时间需求会非常高,如果不是太高的话,这样 arduino 就会陷入中断并且不再执行其他代码。2.使用第二个arduino,它只在循环中运行步进器,所以时序没有问题,可以接收串行数据。但是,如果我希望该 arduino 确认主 arduino 的新设置,那么我将再次短暂暂停......解决方案是在发送数据时切换到中断,否则使用主循环(使用中断发送数据有效,收货有问题)。

这是我的想法。但在我全力以赴之前,我想和你讨论这个问题,并问你,如果你有另一个更好的解决方案,对我来说。

我附上了一个示例代码,arduino 无法在不丢失字节的情况下接收更长的文本。

0 投票
1 回答
1167 浏览

arduino - 通过按钮打开和关闭 Arduino

我正在尝试通过按钮打开和关闭 Arduino。我使用教程https://www.instructables.com/id/A-Guide-to-Putting-Your-Arduino-to-Sleep/来了解如何操作。但不幸的是,这种情况并不适合 100%。我想要通过同一个开关(而不是计时器)打开和关闭。所以我已经按照下图的方式实现了,只是通过attachInterrupt()给事件重新分配了不同的函数。就像您一旦分配给事件就无法重新分配功能。是这样吗?有人有解决这个问题的方法吗?

在再次使用 attachInterrupt 之前,我已经添加了 detachInterrupt。此外,我已经在两者之间添加了延迟。尝试了中断事件 HIGH、LOW 和 CHANGE,总是相同的结果,进入睡眠状态但再也不会醒来。

0 投票
1 回答
241 浏览

arduino - Arduino 草图会重复一条指令,即使它没有太多

我正在编写一个 Arduino Sketch,一般来说它是一个使用 4 个数字系统的计算器:十进制、二进制、八进制和十六进制。当我向用户询问数字系统时,他将使用键盘输入所需的系统(十进制为 1,十六进制为 2,八进制为 3,二进制为 4),然后,在收到此输入后,arduino 在 LCD 上打印选择的系统。但是这部分代码似乎无限重复,没有执行输入数字和操作数的部分。我不能输入不是 1、2、3 或 4 的数字,如果我按下其中一个数字,它会打印它的系统,完全忽略之前的输入。

我尝试使用布尔开关来指示程序如果之前已执行过该部分代码但它似乎不起作用,则不运行该部分代码

这是接收输入并对其进行验证的代码部分。开关盒在其他 3 次中重复其他 3 次,改变了打印的数字系统。

在 switch case 之后,它必须执行以下代码:

显然包括其他 if 条件,这些条件取决于变量“base”(用户在开始时输入的那个)。如果它是 1(十进制)它接受数字 0 到 9,如果它是 2(十六进制)它接受数字 0 到 F 等等。用户使用变量键输入他的数字。calcuShift 对象只是 shift 模式下的普通键盘,用字母和其他两个操作数代替数字,乘法和除法操作数由幂和根操作数代替。

我希望我的计算器接收所需的数字系统,接收此类系统中的数字并使用这些数字进行运算,在先前选择的系统中返回答案,但只是坚持输入指示数字系统的变量“base”用过的。

0 投票
1 回答
158 浏览

arduino - 如何从 C/C++ 中的函数返回几个可选变量?

我正在使用 SIM7000 4G 调制解调器对 ESP32 进行编程,调制解调器库具有一个函数,该函数可以从调制解调器中获取包含 21 个变量的 CSV 字符串,并将其部分解析为变量。原作者只关心少数变量,因此传递了指针。

如果我想修改代码以使所有变量都可用,那么传递 21 个指针似乎很笨拙,尤其是当我一次只关心几个变量时。这是结构的情况吗?使数据可用的最用户友好的方式是什么?

该函数将AT 命令发送到带有 GPS 芯片的蜂窝调制解调器(SIM7000)。收到命令后,芯片会在内部解析来自 GPS 的 NEMA 数据,并返回包含所有相关数据的 CSV 字符串。

完整代码:库-参见第 771 行/代码调用库-第 134 行

我分叉了图书馆让它也返回 GPS 课程信息,并想为什么不让所有返回的数据可用,但是必须传递 21 个指针或定义一个 21 个成员结构并传递它,如果他们的主要代码似乎并不友好只关心纬度/经度,甚至只关心速度。

我喜欢并与独立 gps 接收器一起使用的一个库是TinyGPS++。它将数据作为对象的一部分返回,例如Serial.print(TinyGPSplus.location.lat()). 这是最好的方法吗?我一直在通过 Arduino 学习 C/C++,将不同的示例混合在一起。

0 投票
1 回答
410 浏览

arduino - Arduino十六进制到字符串解码器不起作用

我正在使用 LCD 屏幕(显示 HEX 以及解码的值)、键盘(输入 HEX 代码)和按钮(按下它以解码 HEX 值)创建一个 HEX -> STR 解码器. 解码器有时会工作,但有时会出现故障并呈现出意想不到的值。

我输入49并得到I(这是正确的),但是当我输入时,4949我希望输出是II但它输出IIII,当我输入时,6F期望o整个屏幕模糊和故障。

0 投票
1 回答
427 浏览

c++ - 如何保存计时器按钮状态的值?

我正在 Arduino 上制作一个带有 3 个按钮和 16x2 LCD 屏幕的计时器。显然,我想按一下我的开始按钮,让计时器开始计时,直到按下停止按钮。我有一个重置按钮,它连接到重置引脚,所以我没有为它编写代码。

我已经去过 ladayada.com 关于按钮状态的教程,我严格按照说明进行操作。我仍然得到错误的结果。

我希望 Arduino 保存按钮的状态并计数,直到按下停止按钮。按下停止按钮时,应显示按下时的时间(当前计数)。相反,必须按两次“开始”按钮才能计数一秒。我什至无法理解停止按钮的逻辑。

0 投票
1 回答
427 浏览

arduino - 将字符串转换为 Char* 并使用 SHA-256 对其进行哈希处理

我正在尝试以DateTime以下格式将当前连接到我的设备 Mac 地址:aa:bb:cc:dd:ee:ffYYmmDDhhMMss所以我可以在每次收集新数据时对其进行哈希处理并将其发送到 Web 服务(因此我必须在每个循环中对其进行哈希处理)

我设法连接两个值(mac地址+日期时间)并将其转换为char数组

但是,对于如何继续,我有点迷茫。

我也尝试阅读char*这个循环的结果,但我不明白为什么它不起作用:

我是否正确转换Stringchar*

我应该如何去散列char*

或者我可以散列字符串而不将其转换为char*

更新:

我的代码看起来像这样

所以我设法将其转换StringChar*除了输出看起来像这样33433a37313a42463a31443a34323a463431393035303531343038323700而不是(例如)aa:bb:cc:dd:ee:ff190505141037

在弄清楚为什么我的char*数组输出像这样之后,我仍然需要对其进行哈希处理。

感谢您帮助我走到这一步,我还有很长的路要走

0 投票
1 回答
873 浏览

arduino - (Serial.available() > 0) 等待用户输入

我在 Arduino ide 中遇到用户输入问题。我希望 arduino 定期检查用户是否生成了一些输入字符串(arduino 每 3 秒检查一次),但即使 3 秒后没有输入(字符串 order="")arduino 也会等待用户输入,然后当我输入一些内容时它退出“checkIncomingOrder”功能并再等待 3 秒。我将不胜感激任何建议。我的简单代码如下: