首先,您要读取哪个寄存器?这是一个使用我的RPi::I2C软件的示例(它应该与您正在使用的发行版非常相似),以及一个配置了一堆用于读/写的伪寄存器的草图。
首先,Perl 代码。它读取两个字节(设置为 registeranalogRead()
的引脚的输出),然后将这两个字节移位为 16 位整数以获得引脚的完整 0-1023 值:A0
80
use warnings;
use strict;
use RPi::I2C;
my $arduino_addr = 0x04;
my $arduino = RPi::I2C->new($arduino_addr);
my @bytes = $arduino->read_block(2, 80);
my $a0_value = ($bytes[0] << 8) | $bytes[1];
print "$a0_value\n";
这是一个完整的Arduino 草图,您可以查看它设置了六个左右的伪寄存器,当指定每个寄存器时,Arduino 会写入或读取适当的数据。如果未指定寄存器,则对0x00
寄存器进行操作。
Arduino 上的 I2C 总是onReceive()
先调用onRequest()
(使用时Wire
),所以我设置了一个全局变量reg
来保存寄存器值,我将其填充到onReceive()
中断中,然后在onRequest()
调用中使用它来向您发送数据在您指定的伪寄存器上。
草图本身并没有真正做任何有用的事情,我只是把它作为一个例子。它实际上是我的RPi::WiringPi发行版的自动化单元测试平台的一部分。