reference:library:sleepdog:tutorial01
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
reference:library:sleepdog:tutorial01 [2019/07/30 12:12] – 弘毅 | reference:library:sleepdog:tutorial01 [2023/06/07 04:24] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 每隔十分钟从休眠中醒来 ====== | ||
+ | 使用看门狗定时器作为休眠唤醒定时器有其局限性,那就是最大时间通常都非常短。 | ||
+ | 比如在M0核心的的SAMD21下面,最大16秒就会自动醒来。AVR核心也大同小异。 | ||
+ | |||
+ | 如果要做一个大部分时间都在休眠,每隔10分钟醒来执行某段一段代码的程序我们该怎样设计呢? | ||
+ | |||
+ | 首先,我们定义一个变量runtime(系统运行时间),让单片机进入休眠,每隔一定时间他就会自动醒来(假如这个时间是16秒),醒来后我们让单片机把自己的休眠时间累加进入runtime,然后判断runtime变量是否大于10分钟,当其小于10分钟的时候我们就继续睡眠,醒来后继续把休眠时间加入runtime。当runtime大于10分钟,我们就执行需要运行的程序,运行完毕之后,清空runtime使其归零,并重新进入休眠以此循环。 | ||
+ | |||
+ | <code cpp> | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | #include < | ||
+ | |||
+ | #define MAXSLEEP 600000 | ||
+ | |||
+ | unsigned int sleepTime=0; | ||
+ | |||
+ | void setup() { | ||
+ | |||
+ | pinMode(A5, | ||
+ | digitalWrite(A5, | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | while(sleepTime< | ||
+ | Watchdog.sleep(); | ||
+ | sleepTime+=16000; | ||
+ | } | ||
+ | digitalWrite(A5, | ||
+ | //all work code can place here // | ||
+ | sleepTime=0; | ||
+ | | ||
+ | } | ||
+ | </ |
reference/library/sleepdog/tutorial01.txt · 最后更改: 2023/06/07 04:24 由 127.0.0.1