Buenos días!.
Tengo un problemilla con un arduino uno trabajando como sensor I2C. A ver si me podéis echar una mano.
El codigo del arduino es el siguiente:
#include <Wire.h>
uint8_t SensorName[4] = {0x40, 0x3A, 0x3A, 0x8};
byte x[4]={0,0,0,0};//contiene el valor llegado
byte val=0;
byte a=0;
long ult_salida=0;void setup() {
Serial.begin(9600);
Serial.println("Inicio");
Wire.begin(1);
Wire.onReceive(receiveEvent); //rutinas para cuando llegue algo
Wire.onRequest(requestEvent);
}void loop() {
if (millis()-ult_salida>1000) //se mete en el if cada segundo
{
ult_salida=millis();Serial.print("x:");
Serial.print(x[3], HEX);
Serial.print(x[2], HEX);
Serial.print(x[1], HEX);
Serial.println(x[0], HEX);
}}
void receiveEvent(int len) {
for (int i=0; i<len; i++)
{
if (i<5)
{
x = Wire.read();
}*
else*
{*
Wire.read();*
}*
}*
}
void requestEvent() {Wire.write(SensorName,3);*
}
[/quote]
Hago una lectura al Arduino de 3 bytes y debería devolver 0x40, 0x3A, 0x3A. Pero en este caso devuelve 0x20, 0xFF, 0xFF. Como se muestra en la siguiente imagen. (Si cambiamos Wire.write(SensorName,3); por Wire.write(SensorName,2); da sin ningún problema pidiendo 2 byte 0x40, 0x3A.)
Dropbox - Error - Simplify your life
Nose porque al leer 3 bytes SCL baja tensión despues de hacer el primer ACK con el byte de dirección+read.
Un saludo!.