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

时间:2014-04-06 14:14:59

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

我在这个领域有点初学者

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

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

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

谢谢你!

1 个答案:

答案 0 :(得分:0)

A)有两种解决方案:

  • 您通过串行线发送数字的二进制表示,如'00001111',然后在μC中使用函数strtoul,它将char作为参数(在本例中为'00001111')和base(这里是2)并返回相应的值(这里是0x0F,或16);
  • 你创建了自己的终端,它将输入的二进制表示转换为十进制表示(这里,将'00001111'转换为'16'),发送到使用函数atoi的μc得到相应的值(这里,16或为0x0F)

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