Arduino - 休眠模式

Arduino像电脑和手机一样,也具备休眠功能。
在休眠状态下,系统几乎完全停止运作,只保留基本的侦测功能,因此只消耗少许电力。

主要功能函数如下:

  //引用库文件
  #include 
  // 设置休眠模式
  set_sleep_mode (SLEEP_MODE_PWR_DOWN);
  // 进入休眠状态
  sleep_mode (); 

注意: sleep_mode 为宏指令,它会自动自动开启休眠功能、进入睡眠状态、禁用休眠功能。 按照官方解释,在某些条件下, sleep_mode 宏会导致个别操作步骤开启休眠功能并发出sleep指令进入休眠,所以,另外提供了以下三个指令来分步完成sleep_mode ()工作:

  // 开启休眠功能
  sleep_enable();
  // 进入休眠状态
  sleep_cpu (); 
  //关闭休眠功能 
  sleep_disable();

也就是说,貌似使用sleep_mode会出现意外情况,所以,根据情况自己选择吧。

测试代码如下:

#include   
#include 
int ledPin = 13;
int shu=0;

ISR(WDT_vect){
  //看门狗唤醒执行函数
  shu++;
}

void setup() {  
pinMode(ledPin, OUTPUT);   
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设置休眠模式。
sleep_enable(); //开启休眠功能。
//ACSR |=_BV(ACD);//关掉ACD,据说很省电。不知道唤醒以后要不要重新开,怎么开?
//ADCSRA=0;//关掉ADC,据说很省电。不知道唤醒以后要不要重新开,怎么开?
//按照官方解释,sleep_enable()最好写在中断(attachInterrupt())前,防止中断在开始休眠前就提前释放而造成休眠后无法唤醒。
//开始设置看门狗中断,用来唤醒。   
MCUSR &= ~(1<1<1<1<1<void loop()  
{  
  if (shu>=5){
  digitalWrite(ledPin, HIGH);    
  delay(500);     
  digitalWrite(ledPin, LOW);    
  shu=0;
  }
  sleep_cpu();//进入休眠状态,从此处开始进入休眠。
  //这里不需要喂狗。目的就是等狗超时后执行唤醒函数。 
} 

或者代码可以如下:

#include   
#include 
int ledPin = 13;
int shu=0;

ISR(WDT_vect){
  //看门狗唤醒执行函数
  shu++;
}

void setup() {  
pinMode(ledPin, OUTPUT);   
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设置休眠模式。
//开始设置看门狗中断,用来唤醒。   
MCUSR &= ~(1<1<1<1<1<void loop()  
{  
  if (shu>=5){
  digitalWrite(ledPin, HIGH);    
  delay(500);     
  digitalWrite(ledPin, LOW);    
  shu=0;
  }
  sleep_mode(); //进入休眠状态,从此处开始进入休眠。
  //这里不需要喂狗。目的就是等狗超时后执行唤醒函数。 
} 

你可能感兴趣的:(Arduino)