用户工具

站点工具


reference:library:sleepdog:tutorial01

每隔十分钟从休眠中醒来

使用看门狗定时器作为休眠唤醒定时器有其局限性,那就是最大时间通常都非常短。

比如在M0核心的的SAMD21下面,最大16秒就会自动醒来。AVR核心也大同小异。

如果要做一个大部分时间都在休眠,每隔10分钟醒来执行某段一段代码的程序我们该怎样设计呢?

首先,我们定义一个变量runtime(系统运行时间),让单片机进入休眠,每隔一定时间他就会自动醒来(假如这个时间是16秒),醒来后我们让单片机把自己的休眠时间累加进入runtime,然后判断runtime变量是否大于10分钟,当其小于10分钟的时候我们就继续睡眠,醒来后继续把休眠时间加入runtime。当runtime大于10分钟,我们就执行需要运行的程序,运行完毕之后,清空runtime使其归零,并重新进入休眠以此循环。

/*本例以lora物联网低功耗板为例,开发板为arduino Zero */
/*A5控制外部设备功耗,高电平代表工作状态,低电平代表关机状态*/
/*本例让开发板处于休眠状态,并每隔16s判断是否达到休眠时间,休眠时间不足将继续休眠,否则开启外部设备电源进入全功耗工作状态*/
#include <Adafruit_SleepyDog.h>
 
#define MAXSLEEP 600000
 
unsigned int sleepTime=0;
 
void setup() {
 
  pinMode(A5,OUTPUT);  // 初始化A5引脚为输出
  digitalWrite(A5,LOW);  // A5引脚为低电平,关闭外设电源
 
}
 
void loop() {
 
  while(sleepTime<MAXSLEEP){  //休眠10分钟
    Watchdog.sleep();
    sleepTime+=16000;
  }
  digitalWrite(A5,HIGH);
  //all work code can place here  //其他代码可在此处编写
  sleepTime=0;
 
}
reference/library/sleepdog/tutorial01.txt · 最后更改: 2023/06/07 04:24 由 127.0.0.1