两个 ATtiny85 之间可以通信吗?我可以使用我的 Arduino 与 ATtiny85 进行通信,将 Arduino Uno 用作主机,将 ATtiny85 用作从机。但我想用一台 ATtiny85 作为主机,一台作为从机。这可能吗 ?
我无法理解 TinyWireM 库中给出的示例。我想要一个简单的主从代码进行通信。例如,master 应该要求 1 个整数值,slave 应该回复。
我的奴隶代码:
#define I2C_SLAVE_ADDRESS 0x14 // Address of the slave
#include <TinyWireS.h>
int i=0;
void setup()
{
TinyWireS.begin(I2C_SLAVE_ADDRESS); // join i2c network
TinyWireS.onRequest(requestEvent);
}
void loop()
{
TinyWireS_stop_check();
}
void requestEvent()
{
if(i==1000)
{
TinyWireS.send(1);
i=0;
}
else
i++;
}
我的主代码
#include <TinyWireM.h>
#define DS1621_ADDR 0x14
void setup()
{
TinyWireM.begin();
pinMode(4, OUTPUT);
}
void loop()
{
TinyWireM.requestFrom(DS1621_ADDR,4); // Request 1 byte from slave
int tempC = TinyWireM.receive();
if(tempC)
{
digitalWrite(4, HIGH);
delay(1000); // wait for a second
digitalWrite(4, LOW);
delay(1000); // wait for a second
}
if(tempC>1)
{
digitalWrite(4, HIGH);
delay(1000); // wait for a second
digitalWrite(4, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
}
我尝试了上面的代码,但仍然看不到 LED 闪烁。但是,如果我保持从属代码不变并在 Arduino 上使用以下主代码,那么一切正常。
Arduino Uno 代码作为主控。
#include <Wire.h>
float i1=-1, i2=-1;
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}
void loop()
{
Wire.requestFrom(4, 1); // request 1 byte from slave address 4
while(Wire.available()) // slave may send less than requested
{
i1 = Wire.read(); // receive a byte as character
Serial.println(i1); // print the character
}
}
连接是,连接是 SDA 到 SCL 引脚
主 attiny85 的引脚 5 - 从属 attiny85 的引脚 7 从属 attiny85 的引脚 7 - 主 attiny85 的引脚 5
我也尝试过不交叉连接它们。示例和连接是 SDA 到 SDA 引脚
主阁楼 85 的插针 5 - 从阁楼 85 的插针 5 从阁楼 85 的插针 7 - 主阁楼 85 的插脚 7
但仍然没有成功。