Skip to content

Instantly share code, notes, and snippets.

@carlosdelfino
Last active December 18, 2017 17:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save carlosdelfino/fe30ef6b492d107badc1 to your computer and use it in GitHub Desktop.
Save carlosdelfino/fe30ef6b492d107badc1 to your computer and use it in GitHub Desktop.
Exemplo de código que coloca o Arduino para Dormir.
#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.
}
@carlosdelfino
Copy link
Author

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();

@carlosdelfino
Copy link
Author

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

@rodrigocarlos2
Copy link

Como posso definir o tempo de sleep do Arduino?

@mavaloes
Copy link

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