Last active
December 18, 2017 17:07
-
-
Save carlosdelfino/fe30ef6b492d107badc1 to your computer and use it in GitHub Desktop.
Exemplo de código que coloca o Arduino para Dormir.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <avr/interrupt.h> | |
#include <avr/sleep.h> | |
byte mode; // SLEEP_MODE_IDLE, SLEEP_MODE_PWR_DOWN, SLEEP_MODE_PWR_SAVE, SLEEP_MODE_ADC, SLEEP_MODE_STANDBY, SLEEP_MODE_EXT_STANDBY | |
void setup(){ | |
// configurações básicas do Arduino | |
// aqui você pode colocar o codigo que seleciona o Modo | |
set_sleep_mode(mode); // seleciona como o Arduino irá dormir, isso impacta na forma que o Arduino acorda | |
// outras configurações básicas do Arduino conforme seu projeto; | |
} | |
bool devodormir = false; | |
void loop(){ | |
// seu código no qual precisa executar antes de colocar o Arduino para dormir | |
cli(); // é preciso dar uma pausa em todas as interrupções para a proxima configuração | |
if (devodormir) // controlo se devo ativar ou não o modo dormir. | |
{ | |
sleep_enable(); // ativo o recurso para dormir | |
sei(); // abilito de novo as interrupções, se eu não fizer isso apenas com reset para acordar o Arduino | |
sleep_cpu(); // aqui o Arduino Dorme | |
sleep_disable(); // aqui algo o acordou. a forma de acordar o Arduino muda conforme o modo que se escolheu. | |
} | |
sei(); // reativo todas as interrupções se eu precisar delas. | |
// code que deve ser executado depois de acordar o Arduino. | |
} |
Os modos identificados abaixo podem ser usados, porém é importante lembrar que nem todos o controladores usados podem vir a aceitar o modo selecionado, porém o Arduino UNO que vem com o ATmega328 aceita todos os modos:
SLEEP_MODE_IDLE
SLEEP_MODE_PWR_DOWN
SLEEP_MODE_PWR_SAVE
SLEEP_MODE_ADC
SLEEP_MODE_STANDBY
SLEEP_MODE_EXT_STANDBY
Como posso definir o tempo de sleep do Arduino?
Boa Carlos,
Sou novo no estudo e programação do arduino, e me interessei pela função de colocar o arduino para dormir. Tenho um projeto onde o arduino ficará ligado direto e quero deixar ele em estado de sono após um tempo sem uso, pois isso pode durar até 1 dia inteiro.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
O Código acima é apenas um exemplo de como colocar o Arduino (ATmega) em modo Sleep.
Quando houver alguma interrupção externa nos pinos 2 ou 3 o Arduino retornará sua execução após a função sleep_cpu();