Skip to content

Instantly share code, notes, and snippets.

@WinXaito
Created April 20, 2020 18:52
Show Gist options
  • Save WinXaito/81c32b6dc05db959abe51709a973dc92 to your computer and use it in GitHub Desktop.
Save WinXaito/81c32b6dc05db959abe51709a973dc92 to your computer and use it in GitHub Desktop.
// Il faut inclure la librarie avr/sleep.h pour avoir accès au fonction de sommeil
#include <avr/sleep.h>
// On défini les différentes variables
const int buttonPin = 2; // On défini notre bouton sur le Pin 2
long temps;
bool sleepMode = false;
void setup() {
//Défini la LED interne à l'arduino en mode OUTPUT
pinMode(LED_BUILTIN, OUTPUT);
//Défini le bouton en mode INPUT (celui qui déclenche le réveil)
pinMode(buttonPin, INPUT);
//On allume la LED interne à l'arduino
digitalWrite(LED_BUILTIN, HIGH);
//Variable pour définir le temps
temps = millis();
}
void loop() {
//Pour mon essai, j'active le mode sommeil après 3 secondes (et seulement si il n'a pas déjà été activé)
if(!sleepMode && millis() - t > 3000) {
sleepMode = true;
//Appel de la fonction goSleep() expliquer ci-dessous
goSleep();
}
}
//Fonction goSleep(): Cette fonction va mettre en sommeil profond notre arduino
void goSleep() {
// On active le mode sleep (autorise l'arduino à ce mettre en veille, c'est la fonction sleep_cpu() qui le mettra en veille)
sleep_enable();
//On défini le type de sommeil que l'on veut, nous avons plusieurs possibilités:
//
// SLEEP_MODE_IDLE - Economie d'énergie minimal
// SLEEP_MODE_ADC
// SLEEP_MODE_PWR_SAVE
// SLEEP_MODE_STANDBY
// SLEEP_MODE_PWR_DOWN - Economie d'énergie maximal !
//
// Ici on défini le mode d'économie d'énergie maximal
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
// On attache la fonction wakeUp (détaillé plus bas) au Pin 2
// (La fonction est appelé lorsque le Pin 2 est a HIGH, nous avons d'autres possibilité:
//
// LOW - Fonction appelé lorsque le Pin est à LOW
// CHANGE - Fonction appelé lorsque le Pin change d'état
// RISING - Fonction appelé lorsque le Pin passe de LOW à HIGH
// FALLING - Fonction appelé lorsque le Pin passe de HIGH à LOW
// HIGH - Fonction appelé lorsque le Pin est à HIGH
//
attachInterrupt(digitalPinToInterrupt(2), wakeUp, HIGH);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
//On met l'arduino en veille
sleep_cpu();
//Ce code ci-dessous ne sera exécuté uniquement après le réveil !
digitalWrite(LED_BUILTIN, HIGH);
}
//Fonction wakeUp(): Cette fonction sera appelé lorsque l'on appui sur le bouton (lorsqu'un signal est reçu sur le Pin 2)
void wakeUp() {
//On désactive le mode sommeil
sleep_disable();
//On détache la fonction "interrupt" qui a été attribué au Pin 2
detachInterrupt(0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment