Malexis 90640 sensor

Dependencies:   mbed

main.cpp

Committer:
withboobs
Date:
2018-03-27
Revision:
0:99e98f131071
Child:
1:3f763d28c1be

File content as of revision 0:99e98f131071:

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

#define DEVICE_NUM 1
#define FRAMES_NUM 4
#define TA_SHIFT 8

#define BAUDRATE 115200

Serial pc(SERIAL_TX, SERIAL_RX);

int main()
{
    pc.baud(BAUDRATE);    
    
    MLX90640_I2CFreqSet(1000);
    paramsMLX90640 mlx90640[2];
    uint8_t slaveAddress[2] = {0x33,0x34};
    uint16_t *pEE;
    uint16_t *pFrame;
    paramsMLX90640 *pParam;
    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
    
    pParam = mlx90640;
    pEE = eeMLX90640;
    pFrame = mlx90640Frame;

    for(int i = 0; i < DEVICE_NUM; i++)
    {
        //status = MLX90640_SetRefreshRate(slaveAddress[i],2);
        //status = MLX90640_SetResolution(slaveAddress[i],0x03);
        //status = MLX90640_SetInterleavedMode(slaveAddress[i]);
        //status = MLX90640_SetChessMode(slaveAddress[i]);
        //printf("Reading EEPROM for MLX90640 device %d...\r",i+1);
        MLX90640_I2CFreqSet(400);
        status = MLX90640_DumpEE(slaveAddress[i], pEE);
        MLX90640_I2CFreqSet(400);
//        printf("Extracting parameters for MLX90640 device %d...\r",i+1);
        status = MLX90640_ExtractParameters(pEE, (pParam+i));
    }
    
    while (frameCnt < FRAMES_NUM)
    {
        for(int i = 0; i < DEVICE_NUM; i++)
        {
//            printf("Reading Frame data  for MLX90640 device %d... \n",i+1);
            status = MLX90640_GetFrameData(slaveAddress[i], pFrame);
            eTa = MLX90640_GetTa(pFrame,(pParam+i)) - TA_SHIFT;
            MLX90640_CalculateTo(pFrame, (pParam+i), emissivity, eTa, mlx90640To);
            MLX90640_GetImage(pFrame, (pParam+i), mlx90640To);
            
            for(int i = 0; i < 24; i++)
            {
                pc.printf("S%2d:",i);
                for(int j = 0; j < 32; j ++)
                {
                    int16_t p = 32 * i +j;
                    pc.printf("%06.1f;",mlx90640To[p]);
                }
                pc.printf("\n");
            }

            //printf("Calculated To for MLX90640 device %d is ready \r",i+1);
        }
        
        frameCnt++;
    }

}