eka sinambela / Mbed 2 deprecated g3_waterplay

Dependencies:   mbed

Fork of g3_waterplay by Mario Simaremare

Committer:
mariosimaremare
Date:
Tue Jun 14 09:14:24 2016 +0000
Revision:
2:ed17e258da0d
Parent:
1:f448c12d2c5b
Child:
3:7c648d1d8802
Fixing temperature calculation.

Who changed what in which revision?

UserRevisionLine numberNew 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 0:ad9362f18797 6 #include "mbed.h"
mariosimaremare 0:ad9362f18797 7
mariosimaremare 0:ad9362f18797 8 TemperatureSensor::TemperatureSensor(
mariosimaremare 1:f448c12d2c5b 9 mbed::Serial &serial,
mariosimaremare 0:ad9362f18797 10 PinName pin,
mariosimaremare 0:ad9362f18797 11 double const_voltage,
mariosimaremare 0:ad9362f18797 12 double const_converter,
mariosimaremare 2:ed17e258da0d 13 double const_lower_boundary,
mariosimaremare 2:ed17e258da0d 14 double const_upper_boundary,
mariosimaremare 0:ad9362f18797 15 double variance,
mariosimaremare 0:ad9362f18797 16 double vin,
mariosimaremare 0:ad9362f18797 17 double resistance
mariosimaremare 0:ad9362f18797 18 ):
mariosimaremare 1:f448c12d2c5b 19 _serial(serial),
mariosimaremare 0:ad9362f18797 20 _analog_in(pin),
mariosimaremare 0:ad9362f18797 21 _const_voltage(const_voltage),
mariosimaremare 0:ad9362f18797 22 _const_converter(const_converter),
mariosimaremare 2:ed17e258da0d 23 _const_lower_boundary(const_lower_boundary),
mariosimaremare 2:ed17e258da0d 24 _const_upper_boundary(const_upper_boundary),
mariosimaremare 0:ad9362f18797 25 _variance(variance),
mariosimaremare 0:ad9362f18797 26 _vin(vin),
mariosimaremare 0:ad9362f18797 27 _resistance(resistance),
mariosimaremare 2:ed17e258da0d 28 _reading(0.0),
mariosimaremare 2:ed17e258da0d 29 _voltage(0.0),
mariosimaremare 1:f448c12d2c5b 30 _temperature(0.0),
mariosimaremare 2:ed17e258da0d 31 _status(0.0),
mariosimaremare 0:ad9362f18797 32 _k0(0.00102119),
mariosimaremare 0:ad9362f18797 33 _k1(0.000222468),
mariosimaremare 0:ad9362f18797 34 _k2(0.000000133342),
mariosimaremare 0:ad9362f18797 35 _kelvin_to_celcius(-273.15)
mariosimaremare 0:ad9362f18797 36 {
mariosimaremare 2:ed17e258da0d 37 this->reload();
mariosimaremare 0:ad9362f18797 38 }
mariosimaremare 0:ad9362f18797 39
mariosimaremare 2:ed17e258da0d 40 void TemperatureSensor::reload()
mariosimaremare 0:ad9362f18797 41 {
mariosimaremare 1:f448c12d2c5b 42 this->_reading = _analog_in.read();
mariosimaremare 2:ed17e258da0d 43 this->_voltage = this->_reading * this->_const_voltage * this->_const_converter;
mariosimaremare 2:ed17e258da0d 44 double RT = (this->_voltage * this->_resistance) / (this->_vin - this->_voltage);
mariosimaremare 1:f448c12d2c5b 45 double logRT = log(RT);
mariosimaremare 2:ed17e258da0d 46 double K0 = this->_k0;
mariosimaremare 1:f448c12d2c5b 47 double K1 = this->_k1 * logRT;
mariosimaremare 1:f448c12d2c5b 48 double K2 = this->_k2 * pow(logRT, 3.0);
mariosimaremare 1:f448c12d2c5b 49 double kelvin = 1.0 / (K0 + K1 + K2);
mariosimaremare 1:f448c12d2c5b 50 this->_temperature = (kelvin + this->_kelvin_to_celcius) + this->_variance;
mariosimaremare 1:f448c12d2c5b 51
mariosimaremare 2:ed17e258da0d 52 this->_status = 0.0;
mariosimaremare 2:ed17e258da0d 53 if(this->_temperature < this->_const_lower_boundary){
mariosimaremare 2:ed17e258da0d 54 this->_status = this->_temperature - this->_const_lower_boundary;
mariosimaremare 2:ed17e258da0d 55 } else if(this->_temperature > this->_const_upper_boundary){
mariosimaremare 2:ed17e258da0d 56 this->_status = this->_temperature - this->_const_upper_boundary;
mariosimaremare 2:ed17e258da0d 57 }
mariosimaremare 2:ed17e258da0d 58
mariosimaremare 1:f448c12d2c5b 59 _serial.printf(
mariosimaremare 1:f448c12d2c5b 60 "\ttemperature: %5.4F | %5.4F | %5.4F\n\r",
mariosimaremare 1:f448c12d2c5b 61 this->_reading,
mariosimaremare 1:f448c12d2c5b 62 this->_voltage,
mariosimaremare 1:f448c12d2c5b 63 this->_temperature
mariosimaremare 1:f448c12d2c5b 64 );
mariosimaremare 2:ed17e258da0d 65 }
mariosimaremare 2:ed17e258da0d 66
mariosimaremare 0:ad9362f18797 67
mariosimaremare 2:ed17e258da0d 68 double TemperatureSensor::getReading()
mariosimaremare 2:ed17e258da0d 69 {
mariosimaremare 1:f448c12d2c5b 70 return(this->_reading);
mariosimaremare 0:ad9362f18797 71 }
mariosimaremare 0:ad9362f18797 72
mariosimaremare 2:ed17e258da0d 73
mariosimaremare 0:ad9362f18797 74 double TemperatureSensor::getVoltage()
mariosimaremare 0:ad9362f18797 75 {
mariosimaremare 1:f448c12d2c5b 76 return(this->_voltage);
mariosimaremare 0:ad9362f18797 77 }
mariosimaremare 0:ad9362f18797 78
mariosimaremare 0:ad9362f18797 79 double TemperatureSensor::getTemperature()
mariosimaremare 0:ad9362f18797 80 {
mariosimaremare 1:f448c12d2c5b 81 return(this->_temperature);
mariosimaremare 0:ad9362f18797 82 }
mariosimaremare 2:ed17e258da0d 83
mariosimaremare 2:ed17e258da0d 84 double TemperatureSensor::getStatus()
mariosimaremare 2:ed17e258da0d 85 {
mariosimaremare 2:ed17e258da0d 86 return(this->_status);
mariosimaremare 2:ed17e258da0d 87 }