eka sinambela / Mbed 2 deprecated g3_waterplay

Dependencies:   mbed

Fork of g3_waterplay by Mario Simaremare

TemperatureSensor.cpp

Committer:
mariosimaremare
Date:
2016-06-14
Revision:
2:ed17e258da0d
Parent:
1:f448c12d2c5b
Child:
3:7c648d1d8802

File content as of revision 2:ed17e258da0d:

/*
* G3: WATERPLAY
*/

#include "TemperatureSensor.h"
#include "mbed.h"

TemperatureSensor::TemperatureSensor(
    mbed::Serial &serial,
    PinName pin,
    double const_voltage,
    double const_converter,
    double const_lower_boundary,
    double const_upper_boundary,
    double variance,
    double vin,
    double resistance
):
    _serial(serial),
    _analog_in(pin),
    _const_voltage(const_voltage),
    _const_converter(const_converter),
    _const_lower_boundary(const_lower_boundary),
    _const_upper_boundary(const_upper_boundary),
    _variance(variance),
    _vin(vin),
    _resistance(resistance),
    _reading(0.0),
    _voltage(0.0),
    _temperature(0.0),
    _status(0.0),
    _k0(0.00102119),
    _k1(0.000222468),
    _k2(0.000000133342),
    _kelvin_to_celcius(-273.15)
{
    this->reload();
}

void TemperatureSensor::reload()
{
    this->_reading = _analog_in.read();
    this->_voltage = this->_reading * this->_const_voltage * this->_const_converter;
    double RT = (this->_voltage * this->_resistance) / (this->_vin - this->_voltage);
    double logRT = log(RT);
    double K0 = this->_k0; 
    double K1 = this->_k1 * logRT;
    double K2 = this->_k2 * pow(logRT, 3.0);
    double kelvin = 1.0 / (K0 + K1 + K2);
    this->_temperature = (kelvin + this->_kelvin_to_celcius) + this->_variance;
    
    this->_status = 0.0;
    if(this->_temperature < this->_const_lower_boundary){
        this->_status = this->_temperature - this->_const_lower_boundary;
    } else if(this->_temperature > this->_const_upper_boundary){
        this->_status = this->_temperature - this->_const_upper_boundary;
    }
    
    _serial.printf(
        "\ttemperature: %5.4F | %5.4F | %5.4F\n\r",
        this->_reading,
        this->_voltage,
        this->_temperature
    );
}


double TemperatureSensor::getReading()
{
    return(this->_reading);
}


double TemperatureSensor::getVoltage()
{
    return(this->_voltage);
}

double TemperatureSensor::getTemperature()
{
    return(this->_temperature);
}

double TemperatureSensor::getStatus()
{
    return(this->_status);
}