我正在尝试实现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}?
我认为我对位掩码的解释不正确,这可能是我的错误所在
我在正确的轨道上吗?这是将引脚设置为高电平还是低电平的正确命令?