嗨,我在使用 I2C 处理多个 attiny85 芯片时遇到了一个大问题:
据我所知,服装使用 7 位地址进行通信。我正在使用 TinyWireS 库,它对我来说非常好用,直到我到达地址:'64',即二进制的 '1000000'。最高可用地址应为“1111111”。
这就是发生的事情:
奴隶:
Attiny85:当通过 I2C 接收到 msg 时打开或关闭 LED。
从地址:64
#include <TinyWireS.h>
#include <usiTwiSlave.h>
#define output (4)
#define I2C_SLAVE_ADDR (64) //works if I2C_SLAVE_ADDR < 64
void setup() {
TinyWireS.begin(I2C_SLAVE_ADDR);
pinMode(output, OUTPUT);
}
volatile bool state = LOW;
void loop() {
byte msg = -1;
if(TinyWireS.available())
msg = TinyWireS.receive();
if(msg == 1)
state = HIGH;
else if(msg == 0)
state = LOW;
else if(msg == 2)
state = !state;
digitalWrite(output, state);
}
掌握:
Arduino专业迷你版:
发送消息(0,真);//作品!片上LED:64个开关
发送消息(64,真);//失败!芯片上的 LED:64 关闭。
#include <Wire.h>
#define DEVICE (64) //0 works!
void setup() {
Wire.begin();
}
void loop() {
sendMsg(1, DEVICE);
delay(2000);
sendMsg(0, DEVICE);
delay(2000);
}
void sendMsg(int msg, int device) {
Wire.beginTransmission(device);
Wire.write(msg);
Wire.endTransmission();
}
你知道如何解决这个问题吗?
我正在使用的 TinyWireS 版本:https ://github.com/rambo/TinyWire/tree/master/TinyWireS