デバイスの動作を構成するために別のデバイスの EEPROM に書き込もうとしており、Arduino Uno でデバイスを制御しています。
このウェブページによると、SCK はピン 13 に接続され、SDA はピン 11 に接続されています。
この例から取ったi2c_eeprom_write_byte
との2 つの関数があります。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 に何も送信していないことを意味します。
スレーブデバイスから読み取るにはどうすればよいですか?