Created
April 20, 2020 18:52
-
-
Save WinXaito/81c32b6dc05db959abe51709a973dc92 to your computer and use it in GitHub Desktop.
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
// 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