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

Dependents:   MAB_Heater

Committer:
tbjazic
Date:
Thu Jan 22 13:37:43 2015 +0000
Revision:
0:eb243c2ffbfe
Initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tbjazic 0:eb243c2ffbfe 1 #include "Heater.h"
tbjazic 0:eb243c2ffbfe 2
tbjazic 0:eb243c2ffbfe 3 Heater::Heater(PinName sensorPin, PinName pwmoutPin): sensor(sensorPin), driver(pwmoutPin) {
tbjazic 0:eb243c2ffbfe 4 hysteresis = 0.5;
tbjazic 0:eb243c2ffbfe 5 heaterOn = false;
tbjazic 0:eb243c2ffbfe 6 configureSensor(5, 30);
tbjazic 0:eb243c2ffbfe 7 setTemperature(22);
tbjazic 0:eb243c2ffbfe 8 ticker.attach(this, &Heater::regulateTemperature, 1);
tbjazic 0:eb243c2ffbfe 9 }
tbjazic 0:eb243c2ffbfe 10
tbjazic 0:eb243c2ffbfe 11 void Heater::configureSensor(float minTemperature, float maxTemperature) {
tbjazic 0:eb243c2ffbfe 12 if (minTemperature < maxTemperature) {
tbjazic 0:eb243c2ffbfe 13 minTemp = minTemperature;
tbjazic 0:eb243c2ffbfe 14 maxTemp = maxTemperature;
tbjazic 0:eb243c2ffbfe 15 }
tbjazic 0:eb243c2ffbfe 16 }
tbjazic 0:eb243c2ffbfe 17
tbjazic 0:eb243c2ffbfe 18 float Heater::readTemperature() {
tbjazic 0:eb243c2ffbfe 19 return (maxTemp - minTemp) * sensor.read() + minTemp;
tbjazic 0:eb243c2ffbfe 20 }
tbjazic 0:eb243c2ffbfe 21
tbjazic 0:eb243c2ffbfe 22 bool Heater::isHeaterOn() {
tbjazic 0:eb243c2ffbfe 23 return heaterOn;
tbjazic 0:eb243c2ffbfe 24 }
tbjazic 0:eb243c2ffbfe 25
tbjazic 0:eb243c2ffbfe 26 void Heater::setTemperature(float temp) {
tbjazic 0:eb243c2ffbfe 27 if (temp >= minTemp && temp <= maxTemp) {
tbjazic 0:eb243c2ffbfe 28 desiredTemp = temp;
tbjazic 0:eb243c2ffbfe 29 heaterOnTemp = desiredTemp - hysteresis / 2;
tbjazic 0:eb243c2ffbfe 30 heaterOffTemp = desiredTemp + hysteresis / 2;
tbjazic 0:eb243c2ffbfe 31 }
tbjazic 0:eb243c2ffbfe 32 }
tbjazic 0:eb243c2ffbfe 33
tbjazic 0:eb243c2ffbfe 34 void Heater::regulateTemperature() {
tbjazic 0:eb243c2ffbfe 35 currentTemp = readTemperature();
tbjazic 0:eb243c2ffbfe 36 if (currentTemp < heaterOnTemp && !isHeaterOn())
tbjazic 0:eb243c2ffbfe 37 driver = 1; // turn ON the heater
tbjazic 0:eb243c2ffbfe 38 else if (currentTemp > heaterOffTemp && isHeaterOn())
tbjazic 0:eb243c2ffbfe 39 driver = 0; // turn OFF the heater
tbjazic 0:eb243c2ffbfe 40 heaterOn = driver.read();
tbjazic 0:eb243c2ffbfe 41 }