2

我正在尝试实现firmata协议,并且在破译编写数字引脚的规范时遇到了一些困难:

我已经注意到Firmata 2.3 规范的以下部分

* type                command  channel    first byte            second byte 
------------------------------------------------------------------------------
* digital I/O message   0x90   port       LSB(bits 0-6)         MSB(bits 7-13)

/* two byte digital data format, second nibble of byte 0 gives the port number (e.g. 0x92 is the third port, port 2)
 * 0  digital data, 0x90-0x9F, (MIDI NoteOn, but different data format)
 * 1  digital pins 0-6 bitmask
 * 2  digital pin 7 bitmask 
 */

我在解释规范时遇到了一些困难。我查看了其他实现,但无法看到规范和实现之间的关系。

所以假设我想打开 Arduino LED(引脚 13),我知道它将在第二个端口,端口 1 上,所以第一个字节将是#{91}.

不过,我对后两个字节的位掩码感到困惑。我知道位掩码是什么,所以我想为引脚启用正确的位。

  • 为什么数字引脚的位掩码如此之大?我熟悉在 PLC 的数字输出上使用位掩码,这似乎有很大不同(一个引脚,一位)

  • 我的想法是引脚 13 将是端口 1 上的第 7 个引脚。由于我不关心其他引脚,我会在第 2 个字节 #{40} 中标记引脚,并且我不需要为第三个字节#{00}?

我认为我对位掩码的解释不正确,这可能是我的错误所在

我在正确的轨道上吗?这是将引脚设置为高电平还是低电平的正确命令?

4

1 回答 1

1

在使用 Firmata 测试应用程序进行一些strace调试后,我发现打开 Pin 13 的简单命令是:

#{912000}

并关闭它:

#{910000}
于 2014-06-25T20:56:39.403 回答