Malexis 90640 sensor

Dependencies:   mbed

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++;
+    }
+
+}