Simple heater library for controlling the temperature via analog temperature sensor and digital heater output.
Diff: Heater.cpp
- Revision:
- 0:eb243c2ffbfe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Heater.cpp Thu Jan 22 13:37:43 2015 +0000 @@ -0,0 +1,41 @@ +#include "Heater.h" + +Heater::Heater(PinName sensorPin, PinName pwmoutPin): sensor(sensorPin), driver(pwmoutPin) { + hysteresis = 0.5; + heaterOn = false; + configureSensor(5, 30); + setTemperature(22); + ticker.attach(this, &Heater::regulateTemperature, 1); +} + +void Heater::configureSensor(float minTemperature, float maxTemperature) { + if (minTemperature < maxTemperature) { + minTemp = minTemperature; + maxTemp = maxTemperature; + } +} + +float Heater::readTemperature() { + return (maxTemp - minTemp) * sensor.read() + minTemp; +} + +bool Heater::isHeaterOn() { + return heaterOn; +} + +void Heater::setTemperature(float temp) { + if (temp >= minTemp && temp <= maxTemp) { + desiredTemp = temp; + heaterOnTemp = desiredTemp - hysteresis / 2; + heaterOffTemp = desiredTemp + hysteresis / 2; + } +} + +void Heater::regulateTemperature() { + currentTemp = readTemperature(); + if (currentTemp < heaterOnTemp && !isHeaterOn()) + driver = 1; // turn ON the heater + else if (currentTemp > heaterOffTemp && isHeaterOn()) + driver = 0; // turn OFF the heater + heaterOn = driver.read(); +} \ No newline at end of file