1 votos

La salida del maestro I2C es siempre 255

Estamos utilizando dos Arduino UNO como maestro/esclavo para este protocolo I2C. Utilizamos el primer Arduino (esclavo) como un sensor que introducirá datos ficticios (en este caso, datos de temperatura). El Arduino (maestro) debería ser capaz de emitir lo que el esclavo ha introducido, pero cada vez que lo ejecutamos, la salida es siempre 255 en lugar de los datos de temperatura.

No sabemos qué es lo que falla en el código, pero queremos leer los datos reales. ¿Puede alguien ayudarnos?

Este es el código que utilizamos para el Maestro:

// Include Arduino Wire library for I2C 
#include <Wire.h>

// Define Temp Slave I2C Address
#define TEMP_ADDRESS 9

void setup() {
Wire.begin(); // Initialize I2C communications as Master 

Serial.begin(9600); // Setup serial monitor 
Serial.println(">>>MASTER IS READY<<<"); 
Serial.println('\n');
}

void loop() { //Temperature 
delay(50); 

Wire.requestFrom(TEMP_ADDRESS, 12); 
Serial.print("TEMP ADDRESS: "); 
Serial.println(TEMP_ADDRESS); 
Serial.println("Receive data from TEMP Slave"); 

byte MasterReceivedTemp = Wire.read();

Serial.print("Temperature = "); 
Serial.println(MasterReceivedTemp);

Serial.println('\n');
}

2voto

MarkU Puntos 3743

En lugar de descartar el valor de retorno de Wire.requestFrom(TEMP_ADDRESS, 12); , comprueba el valor de retorno para determinar si el Wire.requestFrom ha funcionado correctamente o no:

byte numBytesReceived = Wire.requestFrom(TEMP_ADDRESS, /* quantity */ 12); 
if (numBytesReceived == 0) {
  Serial.print("** error: device not found **");
}
else if (numBytesReceived < 12) {
  Serial.print("** error: incomplete transfer **");
}
else {
  Serial.print("++ device reply received ++");
}

La documentación está aquí:

https://www.arduino.cc/en/Reference/WireRequestFrom

Vea también esta pregunta sobre el uso de Arduino como esclavo I2C:

https://arduino.stackexchange.com/questions/43007/why-is-a-delay1-necessary-before-wire-requestfrom

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X