【问题标题】:Terminal input serial commands, output Arduino Tx终端输入串口命令,输出Arduino Tx
【发布时间】:2014-04-06 14:14:58
【问题描述】:

我在这个领域有点初学者

我正在使用 Arduino Mega2560 并将其与自动售货机的投币机连接。 投币机运行在名为 MDB(多点总线)的协议上,该协议是 9 位串行的。 我通常会使用 Arduino IDE,但这不适合 9 位串行。因此,我决定使用 c 和 ubuntu 12.04 进行编码。我遇到了一个usart设置功能,它可以bitbash进入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,进行测试,使终端中我输入的8bit二进制数也出现在终端上。

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

我正在尝试做类似于 Bouni 的 MateDealer 的事情(请参阅 github 存储库) 但他将 Arduino 实现为奴隶,我想实现为主人。 更多关于他的项目here

谢谢!

【问题讨论】:

    标签: c linux serialization serial-port avr-gcc


    【解决方案1】:

    A) 有两种解决方案:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多