From ed3497fba4bcc4923d964a370b3d31e71bc81317 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 11 Feb 2016 16:31:03 +0100 Subject: [PATCH] Added some interrupt code to arduino --- arduino/HalMultiSensor/HalMultiSensor.ino | 5 +- arduino/HalMultiSensor/InterruptUtil.cpp | 62 +++++++++++++++++++++++ arduino/HalMultiSensor/InterruptUtil.h | 13 +++++ 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100755 arduino/HalMultiSensor/InterruptUtil.cpp create mode 100755 arduino/HalMultiSensor/InterruptUtil.h diff --git a/arduino/HalMultiSensor/HalMultiSensor.ino b/arduino/HalMultiSensor/HalMultiSensor.ino index 7da87c45..01f184a8 100755 --- a/arduino/HalMultiSensor/HalMultiSensor.ino +++ b/arduino/HalMultiSensor/HalMultiSensor.ino @@ -4,12 +4,11 @@ the data to a central location. */ - -void setup(){ +void setup() +{ } - void loop() { } diff --git a/arduino/HalMultiSensor/InterruptUtil.cpp b/arduino/HalMultiSensor/InterruptUtil.cpp new file mode 100755 index 00000000..47c6ff30 --- /dev/null +++ b/arduino/HalMultiSensor/InterruptUtil.cpp @@ -0,0 +1,62 @@ +#include +#include + + +void Interrupt::pinInterrupt() // here the interrupt is handled after wakeup +{ + // execute code here after wake-up before returning to the loop() function + // timers and code using timers (serial.print and more...) will not work here. + // we don't really need to execute any special functions here, since we + // just want the thing to wake up +} + +void Interrupt::setupInterrupt() +{ + /* + * The 5 different modes are: + * SLEEP_MODE_IDLE -the least power savings + * SLEEP_MODE_ADC + * SLEEP_MODE_PWR_SAVE + * SLEEP_MODE_STANDBY + * SLEEP_MODE_PWR_DOWN -the most power savings + * + * For now, we want as much power savings as possible, so we + * choose the according + * sleep mode: SLEEP_MODE_PWR_DOWN + */ + set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here + + sleep_enable(); // enables the sleep bit in the mcucr register + // so sleep is possible. just a safety pin + + /* Now it is time to enable an interrupt. + * In the function call attachInterrupt(A, B, C) + * A can be either 0 or 1 for interrupts on pin 2 or 3. + * B Name of a function you want to execute at interrupt for A. + * C Trigger mode of the interrupt pin. can be: + * LOW a low level triggers + * CHANGE a change in level triggers + * RISING a rising edge of a level triggers + * FALLING a falling edge of a level triggers + * + * In all but the IDLE sleep modes only LOW can be used. + */ + attachInterrupt(0,pinInterrupt, LOW); + /* + power_adc_disable(); + power_spi_disable(); + power_timer0_disable(); + power_timer1_disable(); + power_timer2_disable(); + power_twi_disable(); + */ + sleep_mode(); // here the device is actually put to sleep!! + // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP + + sleep_disable(); // first thing after waking from sleep: + // disable sleep... + detachInterrupt(0); // disables interrupt 0 on pin 2 so the + // wakeUpNow code will not be executed + // during normal running time. + power_all_enable(); +} diff --git a/arduino/HalMultiSensor/InterruptUtil.h b/arduino/HalMultiSensor/InterruptUtil.h new file mode 100755 index 00000000..773724e3 --- /dev/null +++ b/arduino/HalMultiSensor/InterruptUtil.h @@ -0,0 +1,13 @@ +#ifndef INTERRUPT_H +#define INTERRUPT_H + + +class INTERRUPT_H +{ +public: + sleep(); +private: + pinInterrupt(); +} + +#endif // INTERRUPT_H \ No newline at end of file