Interrupts


          Interrupts example for Arduino Uno


#include<avr/sleep.h>
#include <avr/power.h>
volatile int f_wdt=1;
int flag=false;
void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN,OUTPUT);
  digitalWrite(LED_BUILTIN,LOW);
  attachInterrupt(digitalPinToInterrupt(2), blink, CHANGE);
  Serial.begin(9600);
//LowPower.sleep(500000);
watch();

}
void enter_sleep()
{
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();
  sleep_disable();
  sleep_enable();
  power_all_enable();
  
}

ISR(WDT_vect){
  if(f_wdt==0)
     f_wdt=1;
  
}
void watch()
{
  MCUSR&=~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR  = (1<<WDP3) | (0<<WDP2) | (0<<WDP1) | (1<<WDP0);
  WDTCSR |= _BV(WDIE);
}
void blink()
{
  flag=true;
  if(flag)
  digitalWrite(LED_BUILTIN,HIGH);
}
void loop() {
  // put your main code here, to run repeatedly:
  if(f_wdt!=1)
  return;
  digitalWrite(LED_BUILTIN,HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN,LOW);
  delay(100);
  
  if(flag)
  {
  flag=false;
  digitalWrite(LED_BUILTIN,LOW);
  enter_sleep();
  
  }
  Serial.print(f_wdt);
f_wdt=0;

}

Comments