Malexis 90640 sensor

Dependencies:   mbed

main.cpp

Committer:
withboobs
Date:
2018-04-19
Revision:
1:3f763d28c1be
Parent:
0:99e98f131071
Child:
2:44869d695501

File content as of revision 1:3f763d28c1be:

#include "mbed.h"
#include <MLX90640_I2C_Driver.h>
#include <MLX90640_API.h>

#define FRAMES_NUM 15
#define TA_SHIFT 8

Timer timer;
Serial pc(USBTX, USBRX);                                                        // tx, rx, Virtual serial port over USB
void PrintEEPROM(uint16_t *p);
void PrintRawData(uint16_t *p);
void PrintToF(float *p);
void PrintToU(float *p);

DigitalOut led_green(LED2);

int main()
{
    MLX90640_I2CFreqSet(1000);
    pc.baud(230400);
    paramsMLX90640 mlx90640;
    uint8_t slaveAddress = 0x33;
    uint16_t *pEE;
    uint16_t *pFrame;
    static uint16_t eeMLX90640[832];
    float mlx90640Vdd;
    float mlx90640Ta;
    static uint16_t mlx90640Frame[834];
    static float mlx90640To[768];
    float emissivity = 1;
    int status = 0;
    int frameCnt = 0;
    float eTa;                      //Ta for emissivity compensation

    pEE = eeMLX90640;
    pFrame = mlx90640Frame;
    status = MLX90640_SetRefreshRate(slaveAddress,1);
    //status = MLX90640_SetResolution(slaveAddress[i],0x03);
    //status = MLX90640_SetInterleavedMode(slaveAddress[i]);
    status = MLX90640_SetChessMode(slaveAddress);
    //printf("Reading EEPROM for MLX90640 device %d...\r\n",i+1);
    MLX90640_I2CFreqSet(400);
    status = MLX90640_DumpEE(slaveAddress, pEE);
    MLX90640_I2CFreqSet(1000);
    //printf("Extracting parameters for MLX90640 device %d...\r\n",i+1);
    status = MLX90640_ExtractParameters(pEE, &mlx90640 );

    while (1) 
    {
        led_green = 1;    // turn on LED until initialization is complete
        status = MLX90640_GetFrameData(slaveAddress, pFrame);
        led_green = 0;    // turn on LED until initialization is complete
        eTa = MLX90640_GetTa(pFrame, &mlx90640) - TA_SHIFT;
        MLX90640_CalculateTo(pFrame, &mlx90640, emissivity, eTa, mlx90640To);
        PrintToU(mlx90640To);
    }

}

void PrintToU(float *p)
{
    uint16_t d;
    pc.printf("S",d);
    for(int i=0; i<768; i++) 
    {
        d = 10 * *p++;
        pc.printf("%04x",d);
    }
    pc.printf("E\n");

}

void PrintToF(float *p)
{
    for(int i=0; i<768; i++) 
    {
        pc.printf("%0.3f,",*p++);
    }
    pc.printf("\n");

}

void PrintRawData(uint16_t *p)
{
    for(int i=0; i<832; i++) {
        pc.printf("%04X,",*p++);
    }
    pc.printf("\r\n");
}