Chenillard leds : lowpower promini 16mhz 5volts?

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

et le croquis :

/*
 * 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);
  }
}


Merci pour votre aide

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
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.