Simple heater library for controlling the temperature via analog temperature sensor and digital heater output.
Heater.cpp@0:eb243c2ffbfe, 2015-01-22 (annotated)
- Committer:
- tbjazic
- Date:
- Thu Jan 22 13:37:43 2015 +0000
- Revision:
- 0:eb243c2ffbfe
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |