0

嗨,我在使用 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

4

0 回答 0