Spiegazione codice per sensore temperatura MLX90614

Salve a tutti, ho fatto molte ricerche e ho un problema con il seguente codice per un progetto di maturita sul sensore di temperatura MLX90614 e siccome devo spiegare il codice chiedo per piacere se qualcuno me lo puo spiegare siùoprattutto la parte della comunicazione seriale :slight_smile:
il codice e il seguente :

#include <i2cmaster.h>


void setup(){
Serial.begin(9600);
Serial.println("Setup...");

i2c_init(); //Initialise the i2c bus
PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
}

void loop(){
int dev = 0x5A<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;

i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);

// read
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); //Read 1 byte and then send ack
data_high = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();

//This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
double tempData = 0x0000; // zero out the data
int frac; // data past the decimal point

// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;

float celcius = tempData - 273.15;
float fahrenheit = (celcius*1.8) + 32;

Serial.print("Celcius: ");
Serial.println(celcius);

Serial.print("Fahrenheit: ");
Serial.println(fahrenheit);

delay(1000); // wait a second before printing again
}

Benvenuto. :) 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 generici utili: http://forum.arduino.cc/index.php?topic=126861.0

Riguardo all'I2C puoi iniziare a leggere questo topic --> http://forum.arduino.cc/index.php?topic=78221.0

Grazie mille per le informazioni e la tempestività delle risposte e dei link complimenti :) Il problema consiste nel fatto che il seriale so come funziona in generale ma non so come spiegare e come funziona proprio quel codice li poiche su internet non ho trovato spiegazioni su quel determinato codice. Ho chiesto anche al mio professore ma purtroppo dice che non sa spiegarmelo quindi chiedo a voi se mi potreste spiegare il codice :) non ho fretta so che potrebbe essere lungo spiegare ma se qualcuno riesce a siegarmi parte per parte il codice ne sarei veramente grato :) :) :)

Soprattutto perchè questa libreria non e ben nota e non ho trovato nulla su internet :( Spero qualcuno abbia la pazienza di spiegarmi il tutto :) :)

Non hai cercato bene :cold_sweat:

Libreria della Adafruit con esempi (per IDE di Arduino) --> https://github.com/adafruit/Adafruit-MLX90614-Library

Fogli tecnici --> https://www.sparkfun.com/datasheets/Sensors/Temperature/SEN-09570-MLX90614.pdf --> https://www.sparkfun.com/datasheets/Sensors/Temperature/SEN-09570-datasheet-3901090614M005.pdf

Qui nei commenti trovi altri esempi di codice --> https://www.sparkfun.com/products/9570

Codice simile al tuo --> http://interface.khm.de/index.php/lab/experiments/infrared-thermometer-mlx90614/

:grin:

Avevo già trovato questa documentazione il fatto e che non spiega come funziona quel codice. Mi spiego meglio! Il progetto l ho fatto il circuito l ho gia montato è provato con il codice scritto in precedenza e funziona alla grande! Ma se mi chiedono spiegami questo codice non so spiegarlo a me servirebbe qualcuno che mi dica passo per passo cosa fa il codice! :)