Arduino - 休眠模式
Arduino像电脑和手机一样,也具备休眠功能。
在休眠状态下,系统几乎完全停止运作,只保留基本的侦测功能,因此只消耗少许电力。
主要功能函数如下:
//引用库文件#include <avr/sleep.h>// 设置休眠模式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 <avr/wdt.h>
#include <avr/sleep.h>
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<<WDRF);
WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR = 1<<WDP1 | 1<<WDP2;
WDTCSR |= _BV(WDIE);
} void loop()
{ if (shu>=5){digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); shu=0;}sleep_cpu();//进入休眠状态,从此处开始进入休眠。//这里不需要喂狗。目的就是等狗超时后执行唤醒函数。
}
或者代码可以如下:
#include <avr/wdt.h>
#include <avr/sleep.h>
int ledPin = 13;
int shu=0;ISR(WDT_vect){//看门狗唤醒执行函数shu++;
}void setup() {
pinMode(ledPin, OUTPUT);
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设置休眠模式。
//开始设置看门狗中断,用来唤醒。
MCUSR &= ~(1<<WDRF);
WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR = 1<<WDP1 | 1<<WDP2;
WDTCSR |= _BV(WDIE);
} void loop()
{ if (shu>=5){digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); shu=0;}sleep_mode(); //进入休眠状态,从此处开始进入休眠。//这里不需要喂狗。目的就是等狗超时后执行唤醒函数。
}
Arduino - 休眠模式相关推荐
- Arduino休眠模式和看门狗以及中断详解
休眠模式.看门狗.中断 一.休眠模式 睡眠中断的触发 二.看门狗 实例一 实例二 三.外部中断 1.为什么需要中断? 2.不关心功耗还需要中断吗? 3.各种板子的中断 4.中断函数.中断触发模式与设置 ...
- arduino 休眠 节能_Arduino低功耗掉电模式看门狗唤醒
最近在做一个低功耗的设备,发射红外来检测前面1米以内左右的地方是否有人,纽扣电池供电,需要持续工作至少两年,因此,要求设备工作电流在ua级别. (1)红外发射接收 由于一般的红外发射接收(下图所示 ...
- Arduino 超级省电之休眠模式用1节18650电池工作17年
Arduino的外围元件模块非常丰富,自己想做个温度报警器,却发现电池供电撑不了几天,于是乎就折腾了一段时间,终于将待机时间延长到了俺退休后^-^,现将过程共享给大家. 首先我们要知道电 ...
- 25元、264KB内存的微处理器,树莓派官方出品,自带快速休眠模式
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现在,25元就能买到一个微处理器. 这是树莓派官方推出的.名为Pico的微处理器,大小仅51mm×21mm,约为两根手指的面积. 然而网友定 ...
- Wake-On-LAN待机或休眠模式中唤醒
Wake-On-LAN简称WOL,是一种电源管理功能:如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒.许多主板厂商支持IBM提出的网络唤醒标准.该标准允许网络管理员远程打开PC机电源,以 ...
- 休眠后gpio状态_浅谈Digi XBee模块的休眠模式
浅谈Digi XBee模块的休眠模式 2020-3-25 Digi XBee S2C模块,如果仅连接电源线可以测得,在待机情况下,大约是10.5mA左右的电流,在休眠时的功耗可以低到0.5uA.可以知 ...
- 电脑休眠和睡眠的区别_Windows操作系统中的休眠模式和睡眠模式有什么区别?...
在工作中,我们会遇到这样一种情况.在电脑上做事情做到一半,突然有紧急的事情要处理,需要离开电脑.打开了好多网页,文档写了一半,软件开了五六个,要是关机了下次再打开,那要一个个找回来,太麻烦了.想保存当 ...
- Linux合上笔记本不进入休眠模式
最近一个问题困扰了我很久,入职之前和人事说过工作中会用自己的电脑,但是人事还是坚持要给我发一个电脑,没办法,公司没有补贴,那就领了吧,索性将这个笔记本配置成了Fedora系统,用来当测试机,但是一直有 ...
- Android开发笔记(一百六十)休眠模式下的定时器控制
定时器AlarmManager常常用于需要周期性处理的场合,比如闹钟提醒.任务轮询等等.并且定时器来源于系统服务,即使App已经不在运行了,也能收到定时器发出的广播而被唤醒.似此回光返照的神技,便遭到 ...
最新文章
- tensorflow.unstack() and tensorflow.stack()
- 【Java源码分析】集合框架-Collections工具类-Arrays工具类
- 研发手Q推广遇到的一系列问题
- Python基础(三)深浅拷贝、函数、文件处理、三元运算、递归、冒泡排序
- MySQL高可用架构InnoDB Cluster (和NDB Cluster是两码事)
- 公式编辑器MathType中矩阵模板的使用技巧
- 超好用json转excel工具
- Linux C 基于epoll的多人聊天室
- 赋能智慧交通的5G关键技术
- linux命令清理磁盘空间,Linux如何使用命令行清理磁盘来增加空间
- mongodb 副本集Replica Set的keyfile验证
- Linux 安装NDK
- TiddlyWiki笔记入门之多维度标签--发散思维与收敛思维的乐园。
- put url带参数_Superlurl 一款开源关键词URL采集工具
- 【SpringBoot-3】Lombok使用详解
- 给小白分享几个学习Android的网站
- 十一、SpringCloud实用篇_Gateway服务网关
- java实现手写签名_手写签字,保存笔迹到图片
- 图像处理 有损压缩变换-离散余弦变换
- C#开发笔记之02-什么时候使用OnXXX方法,这种命名是什么意思?
热门文章
- 图像分析,使用Halcon进行缺陷检测
- OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
- Golang 获取当前外网IP/地址/运营商
- PERT图(工程网络图)
- 自制简易C++日志库——优雅地调试VINS-mono
- 如何永久关闭windows安全中心?
- 服务器microsoft基本显示适配器,win10显卡被识别Microsoft基本显示适配器安装不了驱动怎么办?...
- matlab中产生随机点,如何在matlab中制作圆形并在里面生成随机点
- 阿里百川4.0授权后,渠道页面授权免帐密实现方法
- sybase常见语句