c - 终端输入串行命令,输出 Arduino Tx



我是这个领域的初学者

我正在使用Arduino Mega2560,并将其与自动售货机的投币机连接。投币机在称为MDB(多点总线)的协议上运行,该协议是9位串行的。我通常会使用Arduino IDE,但这不适合9位串行。因此,我决定使用 c 和 ubuntu 12.04 进行编码。我遇到了一个usart设置函数,它可以位bash进入9位模式。我已经安装了avr-gcc avr-libc avrdude。

硬币机根据它接收的串行数据运行,即要重置它需要从其 Rx 读取100101010(这是一个随机的 9 位数字,我不确定目前的真实数字是什么)。另一个例子是,如果它在 Rx 上收到10101111,它将分配所需类型的硬币等。还有各种其他命令,如ack,poll等。因此,我想做的是从Arduino的Tx发送适当的二进制数,并发送到投币机的Rx中,并尝试与投币机进行通信。

这只是为了上下文,但我的主要问题更笼统(让我们假设我们在 8 位模式下工作):

a) 如何在终端上键入一个 8 位二进制数(例如 10111010),并将该数字放在 arduno 的 Tx 线上。b) 由于 mega2560 有 3 个 Tx/Rx 模块,我可以从一个模块发出 Tx 和来自另一个模块的 Rx 进行测试,这样我在终端中输入的 8 位二进制数也出现在终端上。

注意:我希望数字以二进制表示的原因是因为我想看到每个位,这样对我来说更有意义

我正在尝试做一些类似于Bouni的MateDealer的事情(参见github存储库)但他正在将Arduino作为奴隶实施,我想以主人的身份实施。更多关于他的项目在这里。

谢谢你!

A) 有两种解决方案:

  • 您通过串行行发送数字的二进制表示形式,例如"00001111",然后在μC中使用函数strtoul,该函数将字符数组(在本例中为"00001111")和基数(此处为2)作为参数并返回相应的值(此处为0x0F或16);
  • 您创建自己的终端,它将输入的二进制表示转换为十进制表示(此处将"00001111"转换为"16"),发送到使用函数 atoi 获取相应值的 μc(此处为 16 或 0x0F)

我认为前者会更容易,但速度慢一点,而后者可以卸载微控制器。

最新更新