From c9a030774bf1368b6b2938b8a95373f256a4f91d Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Wed, 24 Feb 2016 14:37:48 +0100 Subject: [PATCH] Some more work on Hal Arduino sensor. issue 18 --- arduino/HalMultiSensor/HalConfiguration.h | 5 +- arduino/HalMultiSensor/HalInterfaces.h | 29 ++++----- arduino/HalMultiSensor/HalMultiSensor.ino | 61 ++++++++++++++++++- arduino/HalMultiSensor/HardwarePhotocell.cpp | 23 +++++++ arduino/HalMultiSensor/HardwarePhotocell.h | 12 ++++ .../{InterruptUtil.cpp => Interrupt.cpp} | 0 arduino/HalMultiSensor/Interrupt.h | 18 ++++++ arduino/HalMultiSensor/InterruptUtil.h | 13 ---- 8 files changed, 128 insertions(+), 33 deletions(-) rename arduino/HalMultiSensor/{InterruptUtil.cpp => Interrupt.cpp} (100%) create mode 100755 arduino/HalMultiSensor/Interrupt.h delete mode 100755 arduino/HalMultiSensor/InterruptUtil.h diff --git a/arduino/HalMultiSensor/HalConfiguration.h b/arduino/HalMultiSensor/HalConfiguration.h index 88a463f2..10fa50da 100755 --- a/arduino/HalMultiSensor/HalConfiguration.h +++ b/arduino/HalMultiSensor/HalConfiguration.h @@ -3,7 +3,6 @@ #include "Definitions.h" -#define POLTIME 60*10 // poling in seconds // POWER CONSUMPTION SENSOR #define POWERCON_ENABLED // comment out to disable sensor @@ -14,13 +13,13 @@ #define TEMPERATURE_ENABLED // comment out to disable sensor #define TEMPERATURE_HARDWARE HW_DHT11 #define TEMPERATURE_PROTOCOL PROT_OREGON -#define TEMPERATURE_POL_MULTIPLE 1 // poling in seconds +#define TEMPERATURE_TIMER_MULTIPLIER 1 // poling in minutes // LIGHT SENSOR #define LIGHT_ENABLED // comment out to disable sensor #define LIGHT_HARDWARE HW_BHI750 #define LIGHT_PROTOCOL PROT_OREGON -#define LIGHT_POL_MULTIPLE 1 // poling in seconds +#define LIGHT_TIMER_MULTIPLIER 1 // poling in minutes #endif // HALCONFIGURATION_H \ No newline at end of file diff --git a/arduino/HalMultiSensor/HalInterfaces.h b/arduino/HalMultiSensor/HalInterfaces.h index 4a3d104a..9825e49d 100755 --- a/arduino/HalMultiSensor/HalInterfaces.h +++ b/arduino/HalMultiSensor/HalInterfaces.h @@ -1,33 +1,34 @@ #ifndef HALINTERFACES_H #define HALINTERFACES_H -class HardwarePowerConsumption +class Hardware { public: virtual void setup() = 0; - virtual int getConsumption() = 0; -} +}; -class HardwareTemperature +class HardwarePowerConsumption : public Hardware +{ +public: + // returns number of pulses from power meter + virtual int getConsumption() = 0; + virtual void reset() = 0; +}; + +class HardwareTemperature : public Hardware { public: - virtual void setup() = 0; virtual int getTemperature() = 0; virtual int getHumidity() = 0; -} +}; -class HardwareLight +class HardwareLight : public Hardware { public: virtual void setup() = 0; virtual int getLuminosity() = 0; -} +}; -class HardwareInterrupt -{ -public: - virtual void interrupt(bool enable) = 0; -} class Protocol @@ -35,6 +36,6 @@ class Protocol public: virtual void setup() = 0; virtual void send() = 0; -} +}; #endif // HALINTERFACES_H \ No newline at end of file diff --git a/arduino/HalMultiSensor/HalMultiSensor.ino b/arduino/HalMultiSensor/HalMultiSensor.ino index 01f184a8..53695258 100755 --- a/arduino/HalMultiSensor/HalMultiSensor.ino +++ b/arduino/HalMultiSensor/HalMultiSensor.ino @@ -3,13 +3,68 @@ A interrupt based sensor device that reads multiple sensors and transmits the data to a central location. */ +InterruptUtil timerInterrupt; + +unsigned int timerMultiplierMAX; +unsigned int timerMultiplier = 0; + +// Sensors +HardwarePowerConsumption powerSensor; +HardwareTemperature temperatureSensor; +HardwareLight lightSensor; + +// Protocols +HardwarePowerConsumption powerProtocol; +HardwareTemperature temperatureProtocol; +HardwareLight lightProtocol; + + + +void timerInterrupt() +{ + ++timerMultiplier; + if (timerMultiplier > timerMultiplierMAX) + timerMultiplier = 1; + + // Send power consumption + #ifndef POWERCON_ENABLED + unsigned int consumption = powerSensor.getConsumption(); + powerSensor.reset(); + powerProtocol.setConsumption(consumption); + powerProtocol.send(); + #endif + + // Handle temperature sensor + #ifndef TEMPERATURE_ENABLED + if(timerMultiplier == TEMPERATURE_TIMER_MULTIPLIER) + { + unsigned int temperature = temperatureSensor.getTemperature(); + unsigned int humidity = temperatureSensor.getHumidity(); + temperatureProtocol.setTemperature(temperature); + temperatureProtocol.setHumidity(humidity); + temperatureProtocol.send(); + } + #endif + + // Handle light sensor + #ifndef TEMPERATURE_ENABLED + if(timerMultiplier == LIGHT_TIMER_MULTIPLIER) + { + unsigned int lumen = lightSensor.getLuminosity(); + lightProtocol.setLuminosity(lumen); + lightProtocol.send(); + } + #endif + +} void setup() { - + timerMultipleMAX = LIGHT_TIMER_MULTIPLIER * TEMPERATURE_TIMER_MULTIPLIER; // Find a lowest common denominator + pinInterrupt = InterruptUtil(timerInterrupt); + pinInterrupt.setupTimerInterrupt(60*1000); // one minute scheduled interrupt } -void loop() { -} +void loop() {} diff --git a/arduino/HalMultiSensor/HardwarePhotocell.cpp b/arduino/HalMultiSensor/HardwarePhotocell.cpp index e69de29b..8c2983f5 100755 --- a/arduino/HalMultiSensor/HardwarePhotocell.cpp +++ b/arduino/HalMultiSensor/HardwarePhotocell.cpp @@ -0,0 +1,23 @@ + + +public void pinInterrupt() +{ + ++pulse; +} + + +public HardwarePhotocell::setup() +{ + pinInterrupt = InterruptUtil(pinInterrupt); + pinInterrupt.setupPinInterrupt(PC2); //PC3 +} + +public unsigned int HardwarePhotocell::getConsumption() +{ + return pulse; +} + +public unsigned int HardwarePhotocell::reset() +{ + pulse = 0; +} \ No newline at end of file diff --git a/arduino/HalMultiSensor/HardwarePhotocell.h b/arduino/HalMultiSensor/HardwarePhotocell.h index f6c5072f..d424d156 100755 --- a/arduino/HalMultiSensor/HardwarePhotocell.h +++ b/arduino/HalMultiSensor/HardwarePhotocell.h @@ -1,4 +1,16 @@ #ifndef HARDWAREPHOTOCELL_H #define HARDWAREPHOTOCELL_H + +class HardwarePhotocell : public HardwarePowerConsumption +{ +public: + virtual void setup(); + virtual unsigned int getConsumption(); + virtual void reset(); + +private: + unsigned int pulse; +} + #endif // HARDWAREPHOTOCELL_H \ No newline at end of file diff --git a/arduino/HalMultiSensor/InterruptUtil.cpp b/arduino/HalMultiSensor/Interrupt.cpp similarity index 100% rename from arduino/HalMultiSensor/InterruptUtil.cpp rename to arduino/HalMultiSensor/Interrupt.cpp diff --git a/arduino/HalMultiSensor/Interrupt.h b/arduino/HalMultiSensor/Interrupt.h new file mode 100755 index 00000000..d44a4db5 --- /dev/null +++ b/arduino/HalMultiSensor/Interrupt.h @@ -0,0 +1,18 @@ +#ifndef INTERRUPT_H +#define INTERRUPT_H + +typedef void (*InterruptFunction) (); + +class Interrupt +{ +public: + Interrupt(InterruptFunction callback) : callback(callback) {}; + + //static void sleep(int milliseconds); + void setupPinInterrupt(int pin); + void setupTimerInterrupt(int milliseconds); +private: + InterruptFunction callback; +} + +#endif // INTERRUPT_H \ No newline at end of file diff --git a/arduino/HalMultiSensor/InterruptUtil.h b/arduino/HalMultiSensor/InterruptUtil.h deleted file mode 100755 index 773724e3..00000000 --- a/arduino/HalMultiSensor/InterruptUtil.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef INTERRUPT_H -#define INTERRUPT_H - - -class INTERRUPT_H -{ -public: - sleep(); -private: - pinInterrupt(); -} - -#endif // INTERRUPT_H \ No newline at end of file