Simple heater library for controlling the temperature via analog temperature sensor and digital heater output.

Dependents:   MAB_Heater

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