Thermocouple mV conversion library
Diff: Thermocouple_core_cpp.txt
- Revision:
- 0:a878bf59a337
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Thermocouple_core_cpp.txt Mon Nov 07 15:47:01 2016 +0000 @@ -0,0 +1,43 @@ +#include "thermocouple.h" + +// http://srdata.nist.gov/its90/download/allcoeff.tab + +Thermocouple::Thermocouple(){} +Thermocouple::~Thermocouple() {} + +float Thermocouple::lookup(const int32_t *lut, float voltage, uint16_t size, int16_t offset) { + uint16_t first = 0; + uint16_t last = size - 1; + uint16_t middle = (first + last) / 2; + int32_t integer_voltage = int32_t(voltage*1000); + while (first <= last) { + if (lut[middle] < integer_voltage) + first = middle + 1; + else if (lut[middle] == integer_voltage) { + return static_cast<float>(middle + offset); + } else + last = middle - 1; + + middle = (first + last) / 2; + } + if (first > last) + return static_cast<float>(first+offset); + + return 0; // should never get here +} + +float Thermocouple::convert(float voltage, const thermocouple_poly_subrange range[], const int n) { + int range_id = 0; + float temperature=0; + for(range_id = 0 ; range_id<n;range_id++) + { + if(voltage > range[range_id].min_voltage_range && voltage <= range[range_id].max_voltage_range) + break; + } + + for (int i = 0; i < range[range_id].n; i++) { + temperature += (range[range_id].coef[i] * pow(10,range[range_id].power[i])) * pow(voltage, i); + } + return temperature; +} +