Я пытаюсь записать в EEPROM отдельного устройства, чтобы настроить поведение устройства, и управляю устройством с помощью Arduino Uno.
Согласно этой веб-странице, мой SCK подключен к контакту 13, а мой SDA подключен к контакту 11.
У меня есть две функции, i2c_eeprom_write_byte
и i2c_eeprom_read_byte
, взятые из этого примера.
void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
Wire.begin(deviceaddress); // MUST INCLUDE, otherwise Wire.endTransmission hangs
// called once, in setup
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(rdata);
Wire.endTransmission(false);
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
delay(10);
Wire.requestFrom(deviceaddress,1);
int avail = Wire.available();
Serial.println(avail);
if (Wire.available()) rdata = Wire.read();
// there's a bug here with Wire.available. It's returning 0 (ie, 0 bytes to be read),
// when it should be returning 1, since I want 1 byte.
return rdata;
}
Моя проблема в том, что Wire.available()
всегда возвращает 0, что означает, что ведомое устройство ничего не отправляет ведущему устройству, Arduino.
Как читать с ведомого устройства?