Ich lese über I2C. Auf dieser Seite:
http://playground.arduino.cc/Main/WireLibraryDetailedReference#endTransmission
Es heißt, dass endTransmission()
einer der folgenden Statuscodes zurückgegeben werden kann:
- 0: Erfolgreiches Senden.
- 1: Sendepuffer zu groß für den Twi-Puffer. Dies sollte nicht passieren, da die in twi.h festgelegte TWI-Pufferlänge der in Wire.h eingestellten Sendepufferlänge entspricht.
- 2: Adresse wurde gesendet und ein NACK empfangen. Dies ist ein Problem, und der Master sollte eine STOP-Bedingung senden.
- 3: Daten wurden gesendet und ein NACK empfangen. Dies bedeutet, dass der Slave nicht mehr senden muss. Der Master kann eine STOP-Bedingung oder einen wiederholten START senden. 4: Ein weiterer Twi-Fehler ist aufgetreten (z. B. hat der Master die Bus-Arbitrierung verloren).
Wenn ich nichts an mein Arduino anschließe (oder Pull-up-Widerstände an beide SDA / SCL), erhalte ich immer den Status 2. Aber wie kann ein NACK (oder etwas anderes) empfangen werden, wenn nichts zu kommunizieren ist? Bedeutet es etwas anderes?
Hier ist mein Beispielcode
#include "Wire.h"
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
Wire.beginTransmission(42);
Wire.write(0);
byte status = Wire.endTransmission();
Serial.println(status); // always prints 2
}