From a9a2f1b6f4ebab7bba2d2039e58a188b7f0bed85 Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Sat, 1 Jan 2022 16:07:45 +0100 Subject: [PATCH] move temperature sensor code inside its own class --- .../{TempSensor.h => TemperatureSensor.h} | 4 +-- temp_sensor/include/TempSensor.h | 13 ++++++++ temp_sensor/include/Tmp36Sensor.h | 30 +++++++++++++++++++ temp_sensor/src/temp_sensor.cpp | 25 ++++------------ 4 files changed, 50 insertions(+), 22 deletions(-) rename libraries/Tiny/{TempSensor.h => TemperatureSensor.h} (79%) create mode 100644 temp_sensor/include/TempSensor.h create mode 100644 temp_sensor/include/Tmp36Sensor.h diff --git a/libraries/Tiny/TempSensor.h b/libraries/Tiny/TemperatureSensor.h similarity index 79% rename from libraries/Tiny/TempSensor.h rename to libraries/Tiny/TemperatureSensor.h index 0a072af..f3669e7 100644 --- a/libraries/Tiny/TempSensor.h +++ b/libraries/Tiny/TemperatureSensor.h @@ -2,11 +2,11 @@ #include -class TempSensor : public TinySensor { +class TemperatureSensor : public TinySensor { SensorType sensorType = TEMPERATURE; public: - TempSensor(short id) : + TemperatureSensor(short id) : TinySensor(id) { } diff --git a/temp_sensor/include/TempSensor.h b/temp_sensor/include/TempSensor.h new file mode 100644 index 0000000..2c65c3d --- /dev/null +++ b/temp_sensor/include/TempSensor.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +class TempSensor : public TemperatureSensor { +public: + TempSensor(short id) : + TemperatureSensor(id) { + } + + virtual void setup() = 0; + virtual int readTemp() = 0; +}; diff --git a/temp_sensor/include/Tmp36Sensor.h b/temp_sensor/include/Tmp36Sensor.h new file mode 100644 index 0000000..615decc --- /dev/null +++ b/temp_sensor/include/Tmp36Sensor.h @@ -0,0 +1,30 @@ +#pragma once + +#include "TempSensor.h" + +#define TEMP_POSITIVE PIN_B3 +#define TEMP_PIN A2 + +class Tmp36Sensor : public TempSensor { +public: + Tmp36Sensor(short id) : + TempSensor(id) { + } + + void setup() override { + analogReference(INTERNAL); + pinMode(TEMP_POSITIVE, OUTPUT); + digitalWrite(TEMP_POSITIVE, LOW); + } + + int readTemp() override { + digitalWrite(TEMP_POSITIVE, HIGH); + delay(10); + int reading = analogRead(TEMP_PIN); + digitalWrite(TEMP_POSITIVE, LOW); + + float voltage = reading * (1100 / 1024.0); + float temperatureC = (voltage - 500) / 10; + return roundf(temperatureC * 10); + } +}; diff --git a/temp_sensor/src/temp_sensor.cpp b/temp_sensor/src/temp_sensor.cpp index c73de4c..9fa896b 100644 --- a/temp_sensor/src/temp_sensor.cpp +++ b/temp_sensor/src/temp_sensor.cpp @@ -1,5 +1,5 @@ #include -#include +#include "Tmp36Sensor.h" #include #include @@ -7,21 +7,17 @@ #define SEND_VCC_INTERVAL (int)(60*60/8) // Pins -#define TEMP_POSITIVE PIN_B3 #define SENDER PIN_B2 -#define TEMP_PIN A2 int readTemp(); -TempSensor sensor = TempSensor(TEMP_SENSOR); +TempSensor &sensor = *(new Tmp36Sensor(TEMP_SENSOR)); volatile int counter = 0; void setup() { - analogReference(INTERNAL); - pinMode(TEMP_POSITIVE, OUTPUT); - digitalWrite(TEMP_POSITIVE, LOW); + sensor.setup(); TinySwitch::setup(SENDER); TinyPower::setup(); @@ -30,25 +26,14 @@ void setup() { void loop() { if (counter % SEND_VCC_INTERVAL == 0) { - sensor.sendTempAndVoltage(readTemp()); + sensor.sendTempAndVoltage(sensor.readTemp()); counter = 0; } else if (counter % SEND_INTERVAL == 0) { - sensor.sendTemp(readTemp()); + sensor.sendTemp(sensor.readTemp()); } TinyPower::sleep(); } -int readTemp() { - digitalWrite(TEMP_POSITIVE, HIGH); - delay(10); - int reading = analogRead(TEMP_PIN); - digitalWrite(TEMP_POSITIVE, LOW); - - float voltage = reading * (1100 / 1024.0); - float temperatureC = (voltage - 500) / 10; - return roundf(temperatureC * 10); -} - ISR(PCINT0_vect) { }