Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
TemperatureSensor.cpp@3:7c648d1d8802, 2016-06-16 (annotated)
- Committer:
- mariosimaremare
- Date:
- Thu Jun 16 11:28:59 2016 +0000
- Revision:
- 3:7c648d1d8802
- Parent:
- 2:ed17e258da0d
- Child:
- 5:4cbe44452889
Spread the code into classes.; Median is implemented.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mariosimaremare | 0:ad9362f18797 | 1 | /* |
mariosimaremare | 0:ad9362f18797 | 2 | * G3: WATERPLAY |
mariosimaremare | 0:ad9362f18797 | 3 | */ |
mariosimaremare | 0:ad9362f18797 | 4 | |
mariosimaremare | 0:ad9362f18797 | 5 | #include "TemperatureSensor.h" |
mariosimaremare | 3:7c648d1d8802 | 6 | #include <algorithm> |
mariosimaremare | 0:ad9362f18797 | 7 | #include "mbed.h" |
mariosimaremare | 0:ad9362f18797 | 8 | |
mariosimaremare | 0:ad9362f18797 | 9 | TemperatureSensor::TemperatureSensor( |
mariosimaremare | 3:7c648d1d8802 | 10 | Printer &printer, |
mariosimaremare | 0:ad9362f18797 | 11 | PinName pin, |
mariosimaremare | 0:ad9362f18797 | 12 | double const_voltage, |
mariosimaremare | 0:ad9362f18797 | 13 | double const_converter, |
mariosimaremare | 2:ed17e258da0d | 14 | double const_lower_boundary, |
mariosimaremare | 2:ed17e258da0d | 15 | double const_upper_boundary, |
mariosimaremare | 0:ad9362f18797 | 16 | double variance, |
mariosimaremare | 0:ad9362f18797 | 17 | double vin, |
mariosimaremare | 0:ad9362f18797 | 18 | double resistance |
mariosimaremare | 0:ad9362f18797 | 19 | ): |
mariosimaremare | 3:7c648d1d8802 | 20 | _printer(printer), |
mariosimaremare | 0:ad9362f18797 | 21 | _analog_in(pin), |
mariosimaremare | 0:ad9362f18797 | 22 | _const_voltage(const_voltage), |
mariosimaremare | 0:ad9362f18797 | 23 | _const_converter(const_converter), |
mariosimaremare | 2:ed17e258da0d | 24 | _const_lower_boundary(const_lower_boundary), |
mariosimaremare | 2:ed17e258da0d | 25 | _const_upper_boundary(const_upper_boundary), |
mariosimaremare | 3:7c648d1d8802 | 26 | _const_sample_number(100), |
mariosimaremare | 0:ad9362f18797 | 27 | _variance(variance), |
mariosimaremare | 0:ad9362f18797 | 28 | _vin(vin), |
mariosimaremare | 0:ad9362f18797 | 29 | _resistance(resistance), |
mariosimaremare | 2:ed17e258da0d | 30 | _reading(0.0), |
mariosimaremare | 2:ed17e258da0d | 31 | _voltage(0.0), |
mariosimaremare | 1:f448c12d2c5b | 32 | _temperature(0.0), |
mariosimaremare | 2:ed17e258da0d | 33 | _status(0.0), |
mariosimaremare | 3:7c648d1d8802 | 34 | _strStatus("OK"), |
mariosimaremare | 0:ad9362f18797 | 35 | _k0(0.00102119), |
mariosimaremare | 0:ad9362f18797 | 36 | _k1(0.000222468), |
mariosimaremare | 0:ad9362f18797 | 37 | _k2(0.000000133342), |
mariosimaremare | 0:ad9362f18797 | 38 | _kelvin_to_celcius(-273.15) |
mariosimaremare | 0:ad9362f18797 | 39 | { |
mariosimaremare | 2:ed17e258da0d | 40 | this->reload(); |
mariosimaremare | 0:ad9362f18797 | 41 | } |
mariosimaremare | 0:ad9362f18797 | 42 | |
mariosimaremare | 2:ed17e258da0d | 43 | void TemperatureSensor::reload() |
mariosimaremare | 0:ad9362f18797 | 44 | { |
mariosimaremare | 3:7c648d1d8802 | 45 | double readings[this->_const_sample_number]; |
mariosimaremare | 3:7c648d1d8802 | 46 | for(int counter = 0; counter < this->_const_sample_number; ++counter){ |
mariosimaremare | 3:7c648d1d8802 | 47 | readings[counter] = _analog_in.read(); |
mariosimaremare | 3:7c648d1d8802 | 48 | } |
mariosimaremare | 3:7c648d1d8802 | 49 | |
mariosimaremare | 3:7c648d1d8802 | 50 | sort(readings, readings + this->_const_sample_number); |
mariosimaremare | 3:7c648d1d8802 | 51 | |
mariosimaremare | 3:7c648d1d8802 | 52 | this->_reading = readings[this->_const_sample_number / 2]; |
mariosimaremare | 2:ed17e258da0d | 53 | this->_voltage = this->_reading * this->_const_voltage * this->_const_converter; |
mariosimaremare | 2:ed17e258da0d | 54 | double RT = (this->_voltage * this->_resistance) / (this->_vin - this->_voltage); |
mariosimaremare | 1:f448c12d2c5b | 55 | double logRT = log(RT); |
mariosimaremare | 2:ed17e258da0d | 56 | double K0 = this->_k0; |
mariosimaremare | 1:f448c12d2c5b | 57 | double K1 = this->_k1 * logRT; |
mariosimaremare | 1:f448c12d2c5b | 58 | double K2 = this->_k2 * pow(logRT, 3.0); |
mariosimaremare | 1:f448c12d2c5b | 59 | double kelvin = 1.0 / (K0 + K1 + K2); |
mariosimaremare | 1:f448c12d2c5b | 60 | this->_temperature = (kelvin + this->_kelvin_to_celcius) + this->_variance; |
mariosimaremare | 1:f448c12d2c5b | 61 | |
mariosimaremare | 2:ed17e258da0d | 62 | this->_status = 0.0; |
mariosimaremare | 3:7c648d1d8802 | 63 | this->_strStatus = "OK"; |
mariosimaremare | 2:ed17e258da0d | 64 | if(this->_temperature < this->_const_lower_boundary){ |
mariosimaremare | 2:ed17e258da0d | 65 | this->_status = this->_temperature - this->_const_lower_boundary; |
mariosimaremare | 3:7c648d1d8802 | 66 | this->_strStatus = "LW"; |
mariosimaremare | 2:ed17e258da0d | 67 | } else if(this->_temperature > this->_const_upper_boundary){ |
mariosimaremare | 2:ed17e258da0d | 68 | this->_status = this->_temperature - this->_const_upper_boundary; |
mariosimaremare | 3:7c648d1d8802 | 69 | this->_strStatus = "HI"; |
mariosimaremare | 2:ed17e258da0d | 70 | } |
mariosimaremare | 2:ed17e258da0d | 71 | } |
mariosimaremare | 2:ed17e258da0d | 72 | |
mariosimaremare | 2:ed17e258da0d | 73 | double TemperatureSensor::getReading() |
mariosimaremare | 2:ed17e258da0d | 74 | { |
mariosimaremare | 1:f448c12d2c5b | 75 | return(this->_reading); |
mariosimaremare | 0:ad9362f18797 | 76 | } |
mariosimaremare | 0:ad9362f18797 | 77 | |
mariosimaremare | 2:ed17e258da0d | 78 | |
mariosimaremare | 0:ad9362f18797 | 79 | double TemperatureSensor::getVoltage() |
mariosimaremare | 0:ad9362f18797 | 80 | { |
mariosimaremare | 1:f448c12d2c5b | 81 | return(this->_voltage); |
mariosimaremare | 0:ad9362f18797 | 82 | } |
mariosimaremare | 0:ad9362f18797 | 83 | |
mariosimaremare | 0:ad9362f18797 | 84 | double TemperatureSensor::getTemperature() |
mariosimaremare | 0:ad9362f18797 | 85 | { |
mariosimaremare | 1:f448c12d2c5b | 86 | return(this->_temperature); |
mariosimaremare | 0:ad9362f18797 | 87 | } |
mariosimaremare | 2:ed17e258da0d | 88 | |
mariosimaremare | 2:ed17e258da0d | 89 | double TemperatureSensor::getStatus() |
mariosimaremare | 2:ed17e258da0d | 90 | { |
mariosimaremare | 2:ed17e258da0d | 91 | return(this->_status); |
mariosimaremare | 3:7c648d1d8802 | 92 | } |
mariosimaremare | 3:7c648d1d8802 | 93 | |
mariosimaremare | 3:7c648d1d8802 | 94 | char* TemperatureSensor::getStrStatus() |
mariosimaremare | 3:7c648d1d8802 | 95 | { |
mariosimaremare | 3:7c648d1d8802 | 96 | return(this->_strStatus); |
mariosimaremare | 2:ed17e258da0d | 97 | } |