Malexis 90640 sensor
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:99e98f131071
- Child:
- 1:3f763d28c1be
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Mar 27 13:34:11 2018 +0000 @@ -0,0 +1,78 @@ +#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++; + } + +}