eka sinambela / Mbed 2 deprecated g3_waterplay

Dependencies:   mbed

Fork of g3_waterplay by Mario Simaremare

Committer:
mariosimaremare
Date:
Sun Jun 19 23:48:07 2016 +0000
Revision:
7:46e65aeb4df2
Parent:
5:4cbe44452889
Child:
10:fbab9fa07922
Update the pouring water.

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 5:4cbe44452889 11 PinName pin
mariosimaremare 0:ad9362f18797 12 ):
mariosimaremare 3:7c648d1d8802 13 _printer(printer),
mariosimaremare 0:ad9362f18797 14 _analog_in(pin),
mariosimaremare 2:ed17e258da0d 15 _reading(0.0),
mariosimaremare 2:ed17e258da0d 16 _voltage(0.0),
mariosimaremare 1:f448c12d2c5b 17 _temperature(0.0),
mariosimaremare 2:ed17e258da0d 18 _status(0.0),
mariosimaremare 5:4cbe44452889 19 _strStatus("OK")
mariosimaremare 0:ad9362f18797 20 {
mariosimaremare 2:ed17e258da0d 21 this->reload();
mariosimaremare 0:ad9362f18797 22 }
mariosimaremare 0:ad9362f18797 23
mariosimaremare 2:ed17e258da0d 24 void TemperatureSensor::reload()
mariosimaremare 0:ad9362f18797 25 {
mariosimaremare 5:4cbe44452889 26 double readings[SAMPLING_NUMBER];
mariosimaremare 5:4cbe44452889 27 for(int counter = 0; counter < SAMPLING_NUMBER; ++counter){
mariosimaremare 3:7c648d1d8802 28 readings[counter] = _analog_in.read();
mariosimaremare 3:7c648d1d8802 29 }
mariosimaremare 3:7c648d1d8802 30
mariosimaremare 5:4cbe44452889 31 sort(readings, readings + SAMPLING_NUMBER);
mariosimaremare 3:7c648d1d8802 32
mariosimaremare 5:4cbe44452889 33 this->_reading = readings[SAMPLING_NUMBER / 2];
mariosimaremare 5:4cbe44452889 34 this->_voltage = this->_reading * VIN * CONVERTER;
mariosimaremare 5:4cbe44452889 35 double RT = (this->_voltage * RESISTANCE) / (VIN - this->_voltage);
mariosimaremare 1:f448c12d2c5b 36 double logRT = log(RT);
mariosimaremare 5:4cbe44452889 37 double k0 = K0;
mariosimaremare 5:4cbe44452889 38 double k1 = K1 * logRT;
mariosimaremare 5:4cbe44452889 39 double k2 = K2 * pow(logRT, 3.0);
mariosimaremare 5:4cbe44452889 40 double kelvin = 1.0 / (k0 + k1 + k2);
mariosimaremare 7:46e65aeb4df2 41 this->_temperature = (kelvin + KELVIN_TO_CELCIUS);
mariosimaremare 7:46e65aeb4df2 42
mariosimaremare 7:46e65aeb4df2 43 if(this->_temperature > KELVIN_TO_CELCIUS){
mariosimaremare 7:46e65aeb4df2 44 this->_temperature += VARIANCE;
mariosimaremare 7:46e65aeb4df2 45 }
mariosimaremare 1:f448c12d2c5b 46
mariosimaremare 2:ed17e258da0d 47 this->_status = 0.0;
mariosimaremare 3:7c648d1d8802 48 this->_strStatus = "OK";
mariosimaremare 5:4cbe44452889 49 if(this->_temperature < LOWER_BOUNDARY){
mariosimaremare 5:4cbe44452889 50 this->_status = this->_temperature - LOWER_BOUNDARY;
mariosimaremare 3:7c648d1d8802 51 this->_strStatus = "LW";
mariosimaremare 5:4cbe44452889 52 } else if(this->_temperature > UPPER_BOUNDARY){
mariosimaremare 5:4cbe44452889 53 this->_status = this->_temperature - UPPER_BOUNDARY;
mariosimaremare 3:7c648d1d8802 54 this->_strStatus = "HI";
mariosimaremare 2:ed17e258da0d 55 }
mariosimaremare 2:ed17e258da0d 56 }
mariosimaremare 2:ed17e258da0d 57
mariosimaremare 2:ed17e258da0d 58 double TemperatureSensor::getReading()
mariosimaremare 2:ed17e258da0d 59 {
mariosimaremare 1:f448c12d2c5b 60 return(this->_reading);
mariosimaremare 0:ad9362f18797 61 }
mariosimaremare 0:ad9362f18797 62
mariosimaremare 2:ed17e258da0d 63
mariosimaremare 0:ad9362f18797 64 double TemperatureSensor::getVoltage()
mariosimaremare 0:ad9362f18797 65 {
mariosimaremare 1:f448c12d2c5b 66 return(this->_voltage);
mariosimaremare 0:ad9362f18797 67 }
mariosimaremare 0:ad9362f18797 68
mariosimaremare 0:ad9362f18797 69 double TemperatureSensor::getTemperature()
mariosimaremare 0:ad9362f18797 70 {
mariosimaremare 1:f448c12d2c5b 71 return(this->_temperature);
mariosimaremare 0:ad9362f18797 72 }
mariosimaremare 2:ed17e258da0d 73
mariosimaremare 2:ed17e258da0d 74 double TemperatureSensor::getStatus()
mariosimaremare 2:ed17e258da0d 75 {
mariosimaremare 2:ed17e258da0d 76 return(this->_status);
mariosimaremare 3:7c648d1d8802 77 }
mariosimaremare 3:7c648d1d8802 78
mariosimaremare 3:7c648d1d8802 79 char* TemperatureSensor::getStrStatus()
mariosimaremare 3:7c648d1d8802 80 {
mariosimaremare 3:7c648d1d8802 81 return(this->_strStatus);
mariosimaremare 2:ed17e258da0d 82 }