eka sinambela / Mbed 2 deprecated g3_waterplay

Dependencies:   mbed

Fork of g3_waterplay by Mario Simaremare

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?

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 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 }