用户工具

站点工具


reference:library:sleepdog:sleep

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
reference:library:sleepdog:sleep [2019/07/30 08:00] – [Watchdog.sleep()] liudunreference:library:sleepdog:sleep [2023/06/07 04:24] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +====== Watchdog.sleep() ======
 +设定休眠时常并启动休眠,时间长度为毫秒。
  
 +设定的时常并不是无限长,以SAMD21G为例,其睡眠时常大概为16秒。设置的睡眠时间不可以超过这个时长。
 +
 +比如你设置的睡眠时长为40000ms,也就是40秒,实际醒来时间也为16秒。主要原因在于该睡眠采用内部定时器中断,由于内部定时器位数有限,因此在16s后,内部定时器溢出。
 +
 +无参数状态按照最大睡眠时间自动唤醒。
 +===== 语法 =====
 +<code>
 +unsigned int Watchdog.sleep();
 +unsigned int Watchdog.sleep(unsigned int sleepMS);
 +</code>
 +===== 参数 =====
 +  * sleepMS:休眠时间长度,单位是毫秒。1000代表1秒。
 +===== 返回值 =====
 +返回在睡眠中消耗的时间,单位是毫秒(无符号长整数)。
 +===== 例子 =====
 +<code cpp>
 +/*本例以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;
 +  
 +}
 +</code>