Malexis 90640 sensor
Dependencies: mbed
Diff: MLX90640_API.cpp
- 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 + }