Estoy leyendo sobre I2C. En este sitio:
http://playground.arduino.cc/Main/WireLibraryDetailedReference#endTransmission
Dice que endTransmission()
puede devolver uno de los siguientes códigos de estado:
- 0: envío exitoso.
- 1: Enviar búfer demasiado grande para el búfer twi. Esto no debería suceder, ya que la longitud del búfer TWI establecida en twi.h es equivalente a la longitud del búfer de envío establecida en Wire.h.
- 2: se envió la dirección y se recibió un NACK. Este es un problema y el maestro debe enviar una condición de DETENCIÓN.
- 3: Se enviaron datos y se recibió un NACK. Esto significa que el esclavo no tiene más que enviar. El maestro puede enviar una condición STOP o un START repetido. 4: Se produjo otro error twi (por ejemplo, el maestro perdió el arbitraje del bus).
Si no adjunto nada a mi Arduino (o con resistencias pull-up a ambos SDA / SCL), siempre obtengo el estado 2. Pero, ¿cómo puedo recibir un NACK (o algo) cuando no hay nada con lo que comunicarme? ¿Significa algo más?
Aquí está mi código de ejemplo
#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
}