/* A interrupt based sensor device that reads multiple sensors and transmits the data to a central location. */ #if (ARDUINO >= 100) #include #else #include #endif #include #include "HalInterfaces.h" #include "HalDefinitions.h" #include "HalConfiguration.h" #include "Interrupt.h" Interrupt* interrupt; unsigned int timerMultiplierMAX; unsigned int timerMultiplier = 0; // Sensors HardwarePowerConsumption* powerSensor; HardwareTemperature* tempSensor; HardwareLight* lightSensor; // Protocols ProtocolPowerConsumption* powerProtocol; ProtocolTemperature* tempProtocol; ProtocolLight* lightProtocol; void timerInterruptFunc(); void setup() { 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 // Setup Sensors and protocols #ifdef POWERCON_ENABLED powerSensor = new POWERCON_HARDWARE; powerSensor->setup(); powerProtocol = new POWERCON_PROTOCOL; powerProtocol->setup(); #endif #ifdef TEMPERATURE_ENABLED tempSensor = new TEMPERATURE_HARDWARE; tempSensor->setup(); tempProtocol = new TEMPERATURE_PROTOCOL; tempProtocol->setup(); #endif #ifdef LIGHT_ENABLED lightSensor = new LIGHT_HARDWARE; lightSensor->setup(); lightProtocol = new LIGHT_PROTOCOL; lightProtocol->setup(); #endif } void loop() {} void timerInterruptFunc() { ++timerMultiplier; if (timerMultiplier > timerMultiplierMAX) timerMultiplier = 1; // Send power consumption #ifdef POWERCON_ENABLED if(timerMultiplier == POWER_TIMER_MULTIPLIER) { unsigned int consumption = powerSensor->getConsumption(); powerSensor->reset(); powerProtocol->setConsumption(consumption); powerProtocol->send(); } #endif // Handle temperature sensor #ifdef TEMPERATURE_ENABLED if(timerMultiplier == TEMPERATURE_TIMER_MULTIPLIER) { unsigned int temperature = tempSensor->getTemperature(); unsigned int humidity = tempSensor->getHumidity(); tempProtocol->setTemperature(temperature); tempProtocol->setHumidity(humidity); tempProtocol->send(); } #endif // Handle light sensor #ifdef TEMPERATURE_ENABLED if(timerMultiplier == LIGHT_TIMER_MULTIPLIER) { unsigned int lumen = lightSensor->getLuminosity(); lightProtocol->setLuminosity(lumen); lightProtocol->send(); } #endif }