Member Since: January 27, 2015

Country: United States

  • We've struggled quite a bit to establish communication between an Arduino UNO and MLX90614AAA using the Wire Library for I2C. We finally got it running though. Here's the sketch!

    Title: MLX90614 driver for Arduino
    Author: Varun Nalam & Pravar Jain
    #include <Wire.h>  //Including Wire library to communicate using I2C protocol//
    int device=0x5A;  //MLX90614 device address//
    byte buffer[3];  //3 bytes buffer for data read from the device (data_high, data_low and pec)//
    float temp;  //Variable storing the temperature data acquired//
    //---------------- Functions ----------------//
    //Read data function//
    void readFrom(int device, byte address, int num)
       Wire.beginTransmission(device);  //Start transmission to device (Initiating again)//
       Wire.write(address);  //RAM address for ambient or object temperature//
       Wire.endTransmission(false);  //To make sure bus is not released, restart message given out//
       Wire.requestFrom(device, num);  //Request 3 bytes of data from device//
       int i = 0;
       while(Wire.available())  //Device may send less than requested (abnormal)//
          buffer[i] = Wire.read();  //Receive a byte//
        Wire.endTransmission();  //End transmission and release bus//
    //Write data function//
    void writeTo(int device, byte address)
      Wire.beginTransmission(device);  //Start transmission to device//
      Wire.write(address);  //Send register address//
      Wire.endTransmission();  //End transmission//
    void setup()
      Serial.begin(57600);  //Serial for output//
      Wire.begin();  //Joining i2c bus//
    //End of setup//
    void loop() 
      int address=0x07;  //Choosing RAM address for ambient or object temperature//
      readFrom(device,address,3);  //Read the raw temperature data and PEC from the MLX90614//
      temp=(buffer[1]<<8)|(buffer[0]);  //Adjusting the two bytes of temperature data//
      temp = (temp * 0.02)-0.01;
      temp = temp - 273.15;
      Serial.print("Celcius: ");

No public wish lists :(