Malexis 90640 sensor

Dependencies:   mbed

Revision:
1:3f763d28c1be
Parent:
0:99e98f131071
--- a/MLX90640_API.cpp	Tue Mar 27 13:34:11 2018 +0000
+++ b/MLX90640_API.cpp	Thu Apr 19 18:23:43 2018 +0000
@@ -270,20 +270,20 @@
     
     vdd = MLX90640_GetVdd(frameData, params);
     ta = MLX90640_GetTa(frameData, params);
-    ta4 = pow((ta + 273.15), (double)4);
-    tr4 = pow((tr + 273.15), (double)4);
+    ta4 = powf((ta + 273.15f), 4.0f);
+    tr4 = powf((tr + 273.15f), 4.0f);
     taTr = tr4 - (tr4-ta4)/emissivity;
     
-    alphaCorrR[0] = 1 / (1 + params->ksTo[0] * 40);
-    alphaCorrR[1] = 1 ;
-    alphaCorrR[2] = (1 + params->ksTo[2] * params->ct[2]);
+    alphaCorrR[0] = 1.0f / (1.0f + params->ksTo[0] * 40.0f);
+    alphaCorrR[1] = 1.0f ;
+    alphaCorrR[2] = (1.0f + params->ksTo[2] * params->ct[2]);
     alphaCorrR[3] = alphaCorrR[2] * (1 + params->ksTo[3] * (params->ct[3] - params->ct[2]));
     
 //------------------------- Gain calculation -----------------------------------    
     gain = frameData[778];
     if(gain > 32767)
     {
-        gain = gain - 65536;
+        gain = gain - 65536.0f;
     }
     
     gain = params->gainEE / gain; 
@@ -301,14 +301,14 @@
         }
         irDataCP[i] = irDataCP[i] * gain;
     }
-    irDataCP[0] = irDataCP[0] - params->cpOffset[0] * (1 + params->cpKta * (ta - 25)) * (1 + params->cpKv * (vdd - 3.3));
+    irDataCP[0] = irDataCP[0] - params->cpOffset[0] * (1.0f + params->cpKta * (ta - 25.0f)) * (1.0f + params->cpKv * (vdd - 3.3f));
     if( mode ==  params->calibrationModeEE)
     {
-        irDataCP[1] = irDataCP[1] - params->cpOffset[1] * (1 + params->cpKta * (ta - 25)) * (1 + params->cpKv * (vdd - 3.3));
+        irDataCP[1] = irDataCP[1] - params->cpOffset[1] * (1.0f + params->cpKta * (ta - 25.0f)) * (1.0f + params->cpKv * (vdd - 3.3f));
     }
     else
     {
-      irDataCP[1] = irDataCP[1] - (params->cpOffset[1] + params->ilChessC[0]) * (1 + params->cpKta * (ta - 25)) * (1 + params->cpKv * (vdd - 3.3));
+      irDataCP[1] = irDataCP[1] - (params->cpOffset[1] + params->ilChessC[0]) * (1.0f + params->cpKta * (ta - 25.0f)) * (1.0f + params->cpKv * (vdd - 3.3f));
     }
 
     for( int pixelNumber = 0; pixelNumber < 768; pixelNumber++)
@@ -335,7 +335,7 @@
             }
             irData = irData * gain;
             
-            irData = irData - params->offset[pixelNumber]*(1 + params->kta[pixelNumber]*(ta - 25))*(1 + params->kv[pixelNumber]*(vdd - 3.3));
+            irData = irData - params->offset[pixelNumber]*(1 + params->kta[pixelNumber]*(ta - 25.0f))*(1.0f + params->kv[pixelNumber]*(vdd - 3.3f));
             if(mode !=  params->calibrationModeEE)
             {
               irData = irData + params->ilChessC[2] * (2 * ilPattern - 1) - params->ilChessC[1] * conversionPattern; 
@@ -350,7 +350,7 @@
             Sx = pow((double)alphaCompensated, (double)3) * (irData + alphaCompensated * taTr);
             Sx = sqrt(sqrt(Sx)) * params->ksTo[1];
             
-            To = sqrt(sqrt(irData/(alphaCompensated * (1 - params->ksTo[1] * 273.15) + Sx) + taTr)) - 273.15;
+            To = sqrt(sqrt(irData/(alphaCompensated * (1 - params->ksTo[1] * 273.15f) + Sx) + taTr)) - 273.15f;
                     
             if(To < params->ct[1])
             {
@@ -369,8 +369,7 @@
                 range = 3;            
             }      
             
-            To = sqrt(sqrt(irData / (alphaCompensated * alphaCorrR[range] * (1 + params->ksTo[range] * (To - params->ct[range]))) + taTr)) - 273.15;
-            
+            To = sqrt(sqrt(irData / (alphaCompensated * alphaCorrR[range] * (1 + params->ksTo[range] * (To - params->ct[range]))) + taTr));            
             result[pixelNumber] = To;
         }
     }
@@ -418,14 +417,14 @@
         }
         irDataCP[i] = irDataCP[i] * gain;
     }
-    irDataCP[0] = irDataCP[0] - params->cpOffset[0] * (1 + params->cpKta * (ta - 25)) * (1 + params->cpKv * (vdd - 3.3));
+    irDataCP[0] = irDataCP[0] - params->cpOffset[0] * (1.0f + params->cpKta * (ta - 25.0f)) * (1.0f + params->cpKv * (vdd - 3.3f));
     if( mode ==  params->calibrationModeEE)
     {
-        irDataCP[1] = irDataCP[1] - params->cpOffset[1] * (1 + params->cpKta * (ta - 25)) * (1 + params->cpKv * (vdd - 3.3));
+        irDataCP[1] = irDataCP[1] - params->cpOffset[1] * (1.0f + params->cpKta * (ta - 25.0f)) * (1.0f + params->cpKv * (vdd - 3.3f));
     }
     else
     {
-      irDataCP[1] = irDataCP[1] - (params->cpOffset[1] + params->ilChessC[0]) * (1 + params->cpKta * (ta - 25)) * (1 + params->cpKv * (vdd - 3.3));
+      irDataCP[1] = irDataCP[1] - (params->cpOffset[1] + params->ilChessC[0]) * (1.0f + params->cpKta * (ta - 25.0f)) * (1 + params->cpKv * (vdd - 3.3f));
     }
 
     for( int pixelNumber = 0; pixelNumber < 768; pixelNumber++)
@@ -452,7 +451,7 @@
             }
             irData = irData * gain;
             
-            irData = irData - params->offset[pixelNumber]*(1 + params->kta[pixelNumber]*(ta - 25))*(1 + params->kv[pixelNumber]*(vdd - 3.3));
+            irData = irData - params->offset[pixelNumber]*(1 + params->kta[pixelNumber]*(ta - 25.0f))*(1.0f + params->kv[pixelNumber]*(vdd - 3.3f));
             if(mode !=  params->calibrationModeEE)
             {
               irData = irData + params->ilChessC[2] * (2 * ilPattern - 1) - params->ilChessC[1] * conversionPattern; 
@@ -484,8 +483,8 @@
         vdd = vdd - 65536;
     }
     resolutionRAM = (frameData[832] & 0x0C00) >> 10;
-    resolutionCorrection = pow(2, (double)params->resolutionEE) / pow(2, (double)resolutionRAM);
-    vdd = (resolutionCorrection * vdd - params->vdd25) / params->kVdd + 3.3;
+    resolutionCorrection = powf(2.0f, (float)params->resolutionEE) / powf(2.0f, (float)resolutionRAM);
+    vdd = (resolutionCorrection * vdd - params->vdd25) / params->kVdd + 3.3f;
     
     return vdd;
 }
@@ -512,10 +511,10 @@
     {
         ptatArt = ptatArt - 65536;
     }
-    ptatArt = (ptat / (ptat * params->alphaPTAT + ptatArt)) * pow(2, (double)18);
+    ptatArt = (ptat / (ptat * params->alphaPTAT + ptatArt)) * powf(2.0f, 18.0f);
     
-    ta = (ptatArt / (1 + params->KvPTAT * (vdd - 3.3)) - params->vPTAT25);
-    ta = ta / params->KtPTAT + 25;
+    ta = (ptatArt / (1.0f + params->KvPTAT * (vdd - 3.3f)) - params->vPTAT25);
+    ta = ta / params->KtPTAT + 25.0f;
     
     return ta;
 }
@@ -1162,4 +1161,4 @@
      }
      
      return -7;    
- }        
\ No newline at end of file
+ }