Sensore Temperatura su I2C

Ciao a tutti, un paio di giorni fa il mio professore di informatica mi ha dato due sensori SMTIRMOD09sil (sensori di temperatura all'infrarosso) https://www.distrelec.de/ishop/Datasheets/SMTIRMOD09.pdf (nel datasheet c'è un piccolo errore e all'inizio è chiamato 02sil invece di 09sil) ma io non ho capito come diavolo far comunicare il sensore con l'arduino. Da quel che ho capito il sensore è in slave, e per ottenere la temperatura devo inviargli un numero esadecimale "0xB6", per poi ricevere la temperatura con "Wire.read()" ma non so bene come inviarglielo: nel codice metto   Wire.write(0xB6); oppure Wire.requestFrom(0x2A, 0xB6) oppure come devo fare? :astonished:

Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link utili: http://forum.arduino.cc/index.php?topic=126861.0

E qui la libreria Wire spiegata: http://arduino.cc/en/Reference/Wire

Leggendo il datasheet, mi pare di capire che prima devi spedire il comando con la write() e poi ricevere i 2 byte dal sensore.

Il dispositivo funziona a 3V quindi è necessario usare dei traslatori di livello per le linee SDA e SCL. Innanzitutto devi conoscere l'Adr del sensore che in questo è 0x2A. Poi devi seguire la convenzione della libreria Wire per la lettura e la scrittura.

// Read
  Wire.beginTransmission(Adr);         // device address
  Wire.write(0x00);                        // set start address
  Wire.endTransmission();              // invia dati
  Wire.requestFrom(Adr, 2);           // richiesta dati (in questo caso due byte)
  D1 = byte(Wire.read());                  // primo byte
  D2 = byte(Wire.read());              // secondo byte
  
// Write
  Wire.beginTransmission(Adr);         // device address
  Wire.write(0x00);                        // set start address (in questo caso registro 0)
  Wire.write(R0);                      // primo byte (registro 0)
  Wire.write(R1);                             // secondo byte (registro 1)
  Wire.write(R2);                        // terzo byte (registro 2)
  Wire.endTransmission();               // invia dati