hal/arduino/HalMultiSensor/HalMultiSensor.ino

111 lines
2.6 KiB
Arduino
Raw Normal View History

/*
A interrupt based sensor device that reads multiple sensors and transmits
the data to a central location.
*/
2016-02-24 21:51:16 +01:00
#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
#include <Wire.h>
2016-02-24 21:51:16 +01:00
#include "HalInterfaces.h"
#include "HalDefinitions.h"
#include "HalConfiguration.h"
#include "Interrupt.h"
Interrupt* interrupt;
unsigned int timerMultiplierMAX;
unsigned int timerMultiplier = 0;
// Sensors
SensorPowerConsumption* powerSensor;
SensorTemperature* tempSensor;
SensorLight* lightSensor;
// Protocols
2016-02-24 21:51:16 +01:00
ProtocolPowerConsumption* powerProtocol;
ProtocolTemperature* tempProtocol;
ProtocolLight* lightProtocol;
2016-02-24 21:51:16 +01:00
void timerInterruptFunc();
2016-02-24 15:31:51 +01:00
void setup()
{
2016-02-24 21:51:16 +01:00
timerMultiplierMAX = POWER_TIMER_MULTIPLIER * TEMPERATURE_TIMER_MULTIPLIER * LIGHT_TIMER_MULTIPLIER; // Find a lowest common denominator
interrupt = new Interrupt(timerInterruptFunc);
interrupt->setupTimerInterrupt(60*1000); // one minute scheduled interrupt
2016-02-24 15:31:51 +01:00
// Setup Sensors and protocols
#ifdef POWERCON_ENABLED
powerSensor = new POWERCON_SENSOR;
2016-02-24 21:51:16 +01:00
powerSensor->setup();
powerProtocol = new POWERCON_PROTOCOL;
powerProtocol->setup();
2016-02-24 15:31:51 +01:00
#endif
#ifdef TEMPERATURE_ENABLED
tempSensor = new TEMPERATURE_SENSOR;
2016-02-24 21:51:16 +01:00
tempSensor->setup();
tempProtocol = new TEMPERATURE_PROTOCOL;
tempProtocol->setup();
2016-02-24 15:31:51 +01:00
#endif
#ifdef LIGHT_ENABLED
lightSensor = new LIGHT_SENSOR;
2016-02-24 21:51:16 +01:00
lightSensor->setup();
lightProtocol = new LIGHT_PROTOCOL;
lightProtocol->setup();
2016-02-24 15:31:51 +01:00
#endif
}
void loop() {}
2016-02-24 21:51:16 +01:00
void timerInterruptFunc()
2016-02-11 16:31:03 +01:00
{
++timerMultiplier;
if (timerMultiplier > timerMultiplierMAX)
timerMultiplier = 1;
// Send power consumption
2016-02-24 15:31:51 +01:00
#ifdef POWERCON_ENABLED
if(timerMultiplier == POWER_TIMER_MULTIPLIER)
{
2016-02-24 21:51:16 +01:00
unsigned int consumption = powerSensor->getConsumption();
powerSensor->reset();
powerProtocol->setConsumption(consumption);
powerProtocol->send();
2016-02-24 15:31:51 +01:00
}
#endif
// Handle temperature sensor
2016-02-24 15:31:51 +01:00
#ifdef TEMPERATURE_ENABLED
if(timerMultiplier == TEMPERATURE_TIMER_MULTIPLIER)
{
2016-02-24 21:51:16 +01:00
unsigned int temperature = tempSensor->getTemperature();
unsigned int humidity = tempSensor->getHumidity();
tempProtocol->setTemperature(temperature);
tempProtocol->setHumidity(humidity);
tempProtocol->send();
}
#endif
// Handle light sensor
2016-02-24 15:31:51 +01:00
#ifdef TEMPERATURE_ENABLED
if(timerMultiplier == LIGHT_TIMER_MULTIPLIER)
{
2016-02-24 21:51:16 +01:00
unsigned int lumen = lightSensor->getLuminosity();
lightProtocol->setLuminosity(lumen);
lightProtocol->send();
}
#endif
}