A Hello World program showing how to get temperature readings from the MLX90614 infrared temperature sensor.

Dependencies:   mbed

main.cpp

Committer:
jjones646
Date:
2016-05-11
Revision:
0:964606fa7e7a

File content as of revision 0:964606fa7e7a:

/*
 * Example program showing how to get the temperature readings from
 * an MLX90614 infrared temperature sensor using an mbed.
 * http://www.haoyuelectronics.com/Attachment/GY-906/MLX90614.pdf
 *
 * Jonathan Jones
 */

#include "mbed.h"
#include "gy-906.h"

using namespace gy906;

I2C i2c(p9, p10);
const uint8_t addr = default_addr;

// kelvin to fahrenheit
float k2f(float raw_kelvin)
{
    return (raw_kelvin - 273.15) * 1.8 + 32;
}

// read and return one of the temperature regs
float get_temp(uint8_t reg) {
    char cmd[3] = { 0 };
    // read the temperature data (kelvin)
    cmd[0] = opcode::ram_access | reg;
    i2c.write(addr,cmd,1,true); i2c.read(addr,cmd,3);
    // convert to meaningful units, still in kelvin - just normalized
    return 0.02 * static_cast<float>((cmd[1]<<8)|cmd[0]);
}

int main() {
    uint8_t reg_addrs[] = { ram::T_ambient, ram::T_obj1 };
    float tt = 0.0;
    // clear terminal & hide cursor
    printf("\033[r\033[2J\033[?25l"); fflush(stdout);
    while (true) {
        for (size_t i = 0; i < sizeof(reg_addrs); ++i) {
            tt = get_temp(reg_addrs[i]);
            printf("\r\033[KT%u:\t%.2f°F\r\n", i, k2f(tt));
            fflush(stdout);
        }
        wait(0.1);
        printf("\033[%uA", sizeof(reg_addrs)); fflush(stdout);
    }
}