Mario Simaremare / Mbed 2 deprecated g3_waterplay

Dependencies:   mbed

Committer:
mariosimaremare
Date:
Wed Jun 22 22:15:33 2016 +0000
Revision:
13:142a142a7ac5
Parent:
10:b0fd262a0679
Child:
15:e112bab9aa2f
Fixing message and buzzers.

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 10:b0fd262a0679 45 this->_temperature += 0.21*this->_temperature - 6.09;
mariosimaremare 7:46e65aeb4df2 46 }
mariosimaremare 1:f448c12d2c5b 47
mariosimaremare 2:ed17e258da0d 48 this->_status = 0.0;
mariosimaremare 3:7c648d1d8802 49 this->_strStatus = "OK";
mariosimaremare 5:4cbe44452889 50 if(this->_temperature < LOWER_BOUNDARY){
mariosimaremare 5:4cbe44452889 51 this->_status = this->_temperature - LOWER_BOUNDARY;
mariosimaremare 3:7c648d1d8802 52 this->_strStatus = "LW";
mariosimaremare 5:4cbe44452889 53 } else if(this->_temperature > UPPER_BOUNDARY){
mariosimaremare 5:4cbe44452889 54 this->_status = this->_temperature - UPPER_BOUNDARY;
mariosimaremare 3:7c648d1d8802 55 this->_strStatus = "HI";
mariosimaremare 2:ed17e258da0d 56 }
mariosimaremare 13:142a142a7ac5 57
mariosimaremare 13:142a142a7ac5 58 this->_in_boundary = false;
mariosimaremare 13:142a142a7ac5 59 if(this->_temperature > 0.0 && this->_temperature < 100.0){
mariosimaremare 13:142a142a7ac5 60 this->_in_boundary = true;
mariosimaremare 13:142a142a7ac5 61 }
mariosimaremare 2:ed17e258da0d 62 }
mariosimaremare 2:ed17e258da0d 63
mariosimaremare 2:ed17e258da0d 64 double TemperatureSensor::getReading()
mariosimaremare 2:ed17e258da0d 65 {
mariosimaremare 1:f448c12d2c5b 66 return(this->_reading);
mariosimaremare 0:ad9362f18797 67 }
mariosimaremare 0:ad9362f18797 68
mariosimaremare 2:ed17e258da0d 69
mariosimaremare 0:ad9362f18797 70 double TemperatureSensor::getVoltage()
mariosimaremare 0:ad9362f18797 71 {
mariosimaremare 1:f448c12d2c5b 72 return(this->_voltage);
mariosimaremare 0:ad9362f18797 73 }
mariosimaremare 0:ad9362f18797 74
mariosimaremare 0:ad9362f18797 75 double TemperatureSensor::getTemperature()
mariosimaremare 0:ad9362f18797 76 {
mariosimaremare 1:f448c12d2c5b 77 return(this->_temperature);
mariosimaremare 0:ad9362f18797 78 }
mariosimaremare 2:ed17e258da0d 79
mariosimaremare 2:ed17e258da0d 80 double TemperatureSensor::getStatus()
mariosimaremare 2:ed17e258da0d 81 {
mariosimaremare 2:ed17e258da0d 82 return(this->_status);
mariosimaremare 3:7c648d1d8802 83 }
mariosimaremare 3:7c648d1d8802 84
mariosimaremare 3:7c648d1d8802 85 char* TemperatureSensor::getStrStatus()
mariosimaremare 3:7c648d1d8802 86 {
mariosimaremare 3:7c648d1d8802 87 return(this->_strStatus);
mariosimaremare 13:142a142a7ac5 88 }
mariosimaremare 13:142a142a7ac5 89
mariosimaremare 13:142a142a7ac5 90 bool TemperatureSensor::inBoundary(){
mariosimaremare 13:142a142a7ac5 91 return(this->_in_boundary);
mariosimaremare 2:ed17e258da0d 92 }