[Arduino DUE] comunicazione I2C

girando per la rete ho letto spesso che la libreria Wire non è compatibile con il MLX90614 (termometro senza contatto). questa cosa è vera, oppure posso leggere e scrivere tutte le aree della EEPROM? dato che dovrei modificare lo slave address.

ho provato ad usare la i2cmaster ma al momento della compilazione ho un errore del tipo

C:\Users\Simone\Documents\Arduino\libraries\I2Cmaster/i2cmaster.h:88: fatal error: avr/io.h: No such file or directory

Scarica la versione dell'IDE 1.5.5 e usa la libreria Wire inclusa. --> https://github.com/arduino/Arduino/tree/ide-1.5.x/hardware/arduino/sam/libraries/Wire E' stata convertita per essere usata con i micro ARM.

Ho avuto qualche problema usando due sensori sul bus che, ovviamente, avevano lo stesso indirizzo. Ho dovuto usare Arduino come programmatore della EEPROM interna al sensore per modificare l'indirizzo di uno dei due sensori. A parte questo nessun problema con la libreria Wire.

x PaoloP ho scaricato ed installato la nuova versione, appena riesco la provo. grazie

x BaBBuino hai usato i MLX90614? quindi anche con la libreria Wire si riesce a modificare lo slave address del sensore?

Si, passando al sensore dei valori numerici prestabiliti si entra in modalità programmazione. A quel punto passi l'istruzione per modificare l'indirizzo. Ma ne hai bisogno solo se nel bus hai collegato più di un sensore o un altro apparato I2C ha lo stesso indirizzo del sensore.

Ti serve il codice?

si so come si fa, ma non pensavo si riuscisse con la libreria wire, grazie della dritta. infatti la mia idea era usare piu sensori di temperatura un RTC e un modulo SD, quindi volevo configurare, dove possibile, gli slave address in modo di raggrupparli.

grazie a tutti delle info

ho provato a fare la lettura dei dati ma ottengo sempre 255…
riporto il codice

#include <Wire.h>

//#define CHANGE_ADDR_CMD  0x80
#define DEFAULT_ADDR     0x5A //71
//#define NEW_ADDR         0x01 // Value between 0x01 and 0x7E

byte myBytes[3];

void setup() {
  Wire.begin();
  //temp = 0;
  /*Wire.beginTransmission(DEFAULT_ADDR);
  Wire.write(CHANGE_ADDR_CMD);
  Wire.write(NEW_ADDR);
  Wire.endTransmission();*/
  Serial.begin(9600);
  Serial.println("Melexis MLX90614 temperature Sensor");
}

void loop() {
  Wire.beginTransmission(DEFAULT_ADDR);
  Wire.write(0x07);
  Wire.endTransmission();
  Wire.requestFrom(DEFAULT_ADDR, 2); 
  int c = 0;
  while(Wire.available()) {
    Serial.println("dati disponibili");
    myBytes[c] = Wire.read();
    Serial.println(myBytes[c]);
    c++;
  }
  Serial.println("fine dati validi");
}

sapete dirmi dove sbaglio?