Go Down

Topic: PIR interruption which makes arduino go back in setup() function (Read 1 time) previous topic - next topic


I have been playing with the arduino for quite a while now, but I am still an electronic beginner.
I am trying to do the following sketch:
    - every x seconds the arduino wakes up and read the value of some sensors, then it goes back to sleep. During this time, it cannot be interrupted by the PIR
    - in sleep mode however it can be interrupted from the sleep mode and send a message
    - for the sleep routine I am using the LowPower library
The sensors part is working well. The interruption has some issue since everytime the PIR detects a movement, the code goes back in the setup() function... I canno get what can cause that. Any idea would be welcome.
Here is the code I am using:
Code: [Select]

volatile int interrupt = 0;
void setup(void) {
  // Setup PINs so they can do what we need 
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  /* Initialization */

  Serial.println("Setup done");
  delay(5000); //some time for the PIR sensor to stabalyze
void loop()
  Serial.println("Going to sleep");
void pin2Interrupt()
  const char *msg = "PIR";

  /* This brings us back from sleep. */
  detachInterrupt(0);                 //disable interrupts while we wake up
  interrupt = 1;
  if (interrupt) { // funny, isn't it?
    digitalWrite(LED_PIN, HIGH);
    vw_send((uint8_t *)msg,strlen(msg));
    digitalWrite(LED_PIN, LOW);

void rest()
  interrupt = 0;
  int i =0;
  while (i++ < 3) {
    // Sleep for 8 s with ADC module and BOD module off
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  // some time for the arduino to wake up

void wakeUp(void)
  Serial.print("Waking up...");
  if (interrupt) {
    interrupt = 0;
  } else { Serial.println("timer"); }
// read the sensors


u r inside an interrupt routine and use these vw_...() routines...
can u just set that interrupt flag and do the real work in the loop() function?

what if u just toggle the LED_PIN in that interrupt routine?
will it reset then 2?


definitely follow strategy 1 of Riddick => keep ISR minimal in size and do the work in the main loop() ,,
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)



Ok, it works, thanks a lot.
But I opened another topic for my next issue: putting arduino to sleep and wake up on external interrupt OR after 5mn ... both are woking independently or if sleep time is <= 8s ... but not if this is a longer sleep... more details in the topic.

Go Up