Bonjour,
le schéma chenillard fleche gauche/droite commandé par un interrupteur inverseur a position centrale neutre, comment passer en lowpower mode en position centrale et sortir du lowpower quand l'interrupteur est actionné ? alim : powerbank 5volts, chaque branche est composé de 2 leds oranges en série+resistance.
schéma
/*
* clignotant fleches G/D chenillard leds
* interrupteur a position centrale neutre
* le commun anodes leds au +5v, allumé par low 0
*/
int swleft = 2; // switch inverseur neutre au milieu
int swright = 3;
int leftval = 1;
int rightval = 1;
#define t2 100
#define t3 250
#define t4 25
void setup() {
// set up pins 1 to 13 as outputs
for (int i = 5; i <= 19; i++) {
pinMode(i, OUTPUT);
}
pinMode(swright,INPUT_PULLUP); //
pinMode(swleft,INPUT_PULLUP); //
clearest(); // leds off
}
void loop() {
leftval=digitalRead(swleft);
if (!leftval) {arrow_L(); }
rightval=digitalRead(swright);
if (!rightval) {arrow_R(); }
// comment utiliser lowpower ?
}
// fonctions
// allume leds sur sorties 12 a 19
void arrow_R()
{
for(int i=12; i<=19; i++){
digitalWrite(i,0);
delay(t2);
}
clearest(); // off leds
}
//allume leds sur sorties 12 a 5
void arrow_L()
{
for(int i = 12; i>=5; i--){
digitalWrite(i,0);
delay(t2);
}
clearest(); // off leds
}
// function to switch all LEDs off
void clearest(void)
{
for (int i = 5; i <= 19; i++) {
digitalWrite(i, 1);
delay(t4);
}
}
Bonjour, il faut d'abord charger une librairie pour mettre le mcu en veille, (faible consommation),
Une fois endormi, vous devez utiliser des interruptions pour le réveiller.
Je n'ai pas le matériel pour le tester, essayez-le vous-même pour voir si cela se passe bien et nous commenterons.
/*
clignotant fleches G/D chenillard leds
interrupteur a position centrale neutre
le commun anodes leds au +5v, allumé par low 0
*/
#include <LowPower.h> //1º nous chargeons la bibliothèque pour la mettre en basse consommation
int swleft = 2; // switch inverseur neutre au milieu
int swright = 3;
int leftval = 1;
int rightval = 1;
#define t2 100
#define t3 250
#define t4 25
void setup() {
// set up pins 1 to 13 as outputs
for (int i = 5; i <= 19; i++) {
pinMode(i, OUTPUT);
}
pinMode(swright, INPUT_PULLUP); //
pinMode(swleft, INPUT_PULLUP); //
clearest(); // leds off
}
void loop() {
// On vérifie s'il est au neutre
if (digitalRead(swleft) == HIGH && digitalRead(swright) == HIGH) { //Fonction sera appelée si elle est au neutre
basse_puissance ();
}
leftval = digitalRead(swleft);
if (!leftval) {
arrow_L();
}
rightval = digitalRead(swright);
if (!rightval) {
arrow_R();
}
}
// fonctions
// allume leds sur sorties 12 a 19
void arrow_R()
{
for (int i = 12; i <= 19; i++) {
digitalWrite(i, 0);
delay(t2);
}
clearest(); // off leds
}
//allume leds sur sorties 12 a 5
void arrow_L()
{
for (int i = 12; i >= 5; i--) {
digitalWrite(i, 0);
delay(t2);
}
clearest(); // off leds
}
// function to switch all LEDs off
void clearest(void)
{
for (int i = 5; i <= 19; i++) {
digitalWrite(i, 1);
delay(t4);
}
}
void basse_puissance () {
clearest ();
attachInterrupt(digitalPinToInterrupt(swleft),reveille, FALLING);//Nous préparons le mcu à accepter les interruptions de la broche.
attachInterrupt(digitalPinToInterrupt(leftval),reveille, FALLING);//Nous préparons le mcu à accepter les interruptions de la broche.
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);// Endormir le MCU = économie d'énergie
detachInterrupt(digitalPinToInterrupt(swleft));// nous désactivons les interruptions pour que la broche fonctionne de manière normale.
detachInterrupt(digitalPinToInterrupt(leftval));// nous désactivons les interruptions pour que la broche fonctionne de manière normale.
}
void reveille () {// "ISR" doit être déclenché lorsqu'une interruption se produit pendant le sommeil.
// Vous pourriez en profiter pour faire quelque chose, sinon, ne faites rien et laissez-le vide.
}
Salutations.
PD: ATTENTION, je me suis limité au code, vérifiez si les courants totaux sont tolérés par la carte.
Merci beaucoup, çà fonctionne sur uno, qui sera remplacé par un 328p "standalone" en 8mhz interne sous 5volts (impératif pour les sorties) sans bootloader
la consommation max pour les leds est 40mA quand une fleche complete est allumée
il faut juste corriger votre fonction "basse puissance", remplacer leftval par swright
compréhensible quand on intervient sur un croquis dont on n'a pas défini soi même les variables
j'ai essayé de vous mettre un karma je ne sais pas si c'est fait, avec le nouveau forum.....
void basse_puissance () {
clearest ();
attachInterrupt(digitalPinToInterrupt(swleft),reveille, FALLING);// accepter les interruptions de la broche. 2 swleft
attachInterrupt(digitalPinToInterrupt(swright),reveille, FALLING);//accepter les interruptions de la broche. 3 swright
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);// Endormir le MCU
detachInterrupt(digitalPinToInterrupt(swright));// detache swright
detachInterrupt(digitalPinToInterrupt(swleft));// detache interrupt swleft
}