8-Bit I2C-Register mit Arduino Wire-Bibliothek auslesen: Minimalbeispiel
Der folgende Code demonstriert, wie man ein Register, das 1 Byte (8 Bit) lang ist, über I2C ausliest. Dies funktioniert mit fast allen I2C-Geräten wie EEPROMs, ADCs und anderen, vorausgesetzt man hat die korrekten Einstellungen. Beachten, dass einige Geräte wie der LAN9303 ein leicht abweichendes Adressierungsschema haben oder andere Besonderheiten aufweisen. Meiner Meinung nach ist es am effizientesten, einfach die Standardmethode zum Auslesen eines Registers auszuprobieren und von dort zu starten.
Beachten, dass dieser Code aus Gründen der Einfachheit keine Fehlerbehandlung implementiert. Zusätzlich warten wir auf Daten mit delay() anstelle von Wire.available(). Dies ist ein Minimalbeispiel, das minimale Verwirrung für den Leser erzeugt. Wir werden ein vollständiges Beispiel mit Fehlerbehandlung in einem Folgebeitrag bereitstellen.
delay(2); // Auf Daten warten
const uint8_t SLAVE_I2C_ADDRESS = 0b1010;
const uint16_t SLAVE_I2C_REGISTER_ADDRESS = 0x50;
Wire.beginTransmission(SLAVE_I2C_ADDRESS);
Wire.write(SLAVE_I2C_REGISTER_ADDRESS);
Wire.endTransmission();
Wire.requestFrom(SLAVE_I2C_ADDRESS, 1); // Dieses Register ist 8 Bit = 1 Byte lang
delay(2); // Auf Daten warten
// Direkt in ein uint8_t einlesen
uint8_t buf = (uint8_t)Wire.read();
// Registerwert ausgeben
Serial.printf("Register value: %02x\r\n", buf);Siehe auch:
- 16-Bit I2C-Register mit Arduino Wire-Bibliothek auslesen: Minimalbeispiel
- 32-Bit I2C-Register mit Arduino Wire-Bibliothek auslesen: Minimalbeispiel