Bouton programme multi

Bonjour

Je me permet de faire appel à votre aide. Je suis un peu novice avec les Arduinos.

Présentation de mon projet.

J'ai un bandeau de Led connecté sur l'Arduino en pin 3 ainsi que 2 boutons en Pin 2 et 4 qui me permette de changer les couleurs sur le bandeau.

Je souhaiterais que le bouton 1 gère l'allumage des leds 1.2.3.4 dans un cycle prédéfini a chaque appui sur le bouton1.
Je souhaiterais que le bouton 2 gère l'allumage des leds 5.6.7.8 dans un cycle prédéfini équivalent à celui du 1 à chaque appui sur le bouton 2.

J'ai réussit a le faire avec le bouton 1. Je cherche à faire pareil avec le bouton 2. J'ai aucune idée comment je peux faire pour inclure la même chose sur le bouton 2 .

Voici mon code actuellement . Je suis preneur pour toute proposition.

#include <FastLED.h>

#define LED_PIN     3
#define NUM_LEDS    8
#define BOUTON1     2
#define BOUTON2     4

CRGB leds[NUM_LEDS];
int etatBouton;

void setup() 
{
  // put your setup code here, to run once:
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  pinMode(LED_PIN, OUTPUT); // la led est une sortie
  pinMode(BOUTON1, INPUT); // le bouton est une entrée
  pinMode(BOUTON2, INPUT); // le bouton est une entrée  pinMode
  etatBouton = HIGH; // on initialise l'état du bouton comme "relaché"
}

void loop()
{
  static int coul = 0;
  static bool etatPrec = false;

  bool etatBouton = !digitalRead(BOUTON1);
  if (etatBouton && !etatPrec)
  {
    // on vient d'enfoncer le bouton
    coul++;
    if (coul >= 8)
      coul = 0;
  }
  etatPrec = etatBouton;
  
  switch (coul)
  {
  case 0:
    leds[0] = CRGB(0, 0, 0); // Noir
    leds[1] = CRGB(0, 0, 0);
    leds[2] = CRGB(0, 0, 0);
    leds[3] = CRGB(0, 0, 0);
    FastLED.show();
  break;
  case 1:
    leds[0] = CRGB(0, 0, 255); // Noir
    leds[1] = CRGB(0, 0, 255);
    leds[2] = CRGB(0, 0, 255);
    leds[3] = CRGB(0, 0, 255);
  FastLED.show();
  break;
  case 2:
    leds[0] = CRGB(0, 255, 0); // Vert
    leds[1] = CRGB(0, 255, 0);
    leds[2] = CRGB(0, 255, 0);
    leds[3] = CRGB(0, 255, 0);
    FastLED.show();
  break;
    case 3:
  leds[0] = CRGB(0, 255, 255);  // Cyan
  leds[1] = CRGB(0, 255, 255);
  leds[2] = CRGB(0, 255, 255);
  leds[3] = CRGB(0, 255, 255);
  FastLED.show();
  break;
    case 4:
    leds[0] = CRGB(255, 0, 0); // Rouge
    leds[1] = CRGB(255, 0, 0);
    leds[2] = CRGB(255, 0, 0);
    leds[3] = CRGB(255, 0, 0);
    FastLED.show();
  break;
  case 5:
  leds[0] = CRGB(255, 0, 255); // Magenta
  leds[1] = CRGB(255, 0, 255);
  leds[2] = CRGB(255, 0, 255);
  leds[3] = CRGB(255, 0, 255);
  FastLED.show();
  break;
  case 6:
    leds[0] = CRGB(255, 255, 0); // Jaune
    leds[1] = CRGB(255, 255, 0);
    leds[2] = CRGB(255, 255, 0);
    leds[3] = CRGB(255, 255, 0);
    FastLED.show();
  break;
    case 7:
  leds[0] = CRGB(255, 255, 255); // Blanc
  leds[1] = CRGB(255, 255, 255);
  leds[2] = CRGB(255, 255, 255);
  leds[3] = CRGB(255, 255, 255);
  FastLED.show();
  break;

 break;
 }
    
 //     setColor(0, 255, 0);  // green
 //     break;
 //   case 2:
 //     setColor(0, 0, 255);  // blue
 //     break;
 //   case 3:
 //     setColor(255, 255, 0);  // yellow
 //     break;
 //   case 4:
 //     setColor(80, 0, 80);  // purple
 //    break;
 //   case 5:
 //     setColor(0, 255, 255);  // aqua
 //     break;
 

  delay(10);
}
//void loop()
//{
//    etatBouton = digitalRead(BOUTON); // Rappel : bouton = 2
//
//    if (etatBouton == HIGH) // test si le bouton a un niveau logique HAUT
//    {
//  leds[0] = CRGB(255, 0, 0);
//  leds[1] = CRGB(255, 0, 0);
 // leds[2] = CRGB(255, 0, 0);
  //leds[3] = CRGB(255, 0, 0);
  //FastLED.show();
  //delay(100);
        
   // }
    //else // test si le bouton a un niveau logique différent de HAUT (donc BAS)
    //{
  //leds[0] = CRGB(0, 255, 0);
  //leds[1] = CRGB(0, 255, 0);
  //leds[2] = CRGB(0, 255, 0);
  //leds[3] = CRGB(0, 255, 0);
  //FastLED.show();
  //delay(100);


   // }     
          
             
   // }  
  

  

Salut, bienvenue sur le forum, @solide184 :grin: !
Je ne suis pas sûr de pouvoir t'aider, mais voici ce que je peux te conseiller :

  • formates ton code avec le raccourci CTRL + T (sur Windows et Linux) ou CMD + T (sur macOS).
  • mets les pins de tes boutons en INPUT_PULLUP, et non pas en INPUT seulement.
    Déclares les pins de tes boutons en INPUT_PULLUP, et non pas en INPUT.

Tu peux utiliser une bibliothèque Arduino pour gérer ceux-ci, comme par exemple OneButton, ou Toggle. J'ai fais un tuto sur l'utilisation de OneButton :

Si j'ai bien compris ta demande, regardes bien l'exemple. Il devrait t'être utile :slight_smile:
Et, dites moi si je me trompe, mais ne serait-ce pas un cas se prêtant à la programmation par machine à état ? Si c'est le cas, voici un tuto pour toi :

Bon courage en tout cas. Je serai ravi de t'aider si tu en as besoin :wink:

Bonne bidouille
Amitiés
R-P7

Il y a la méthode bourrin et facile.

  1. Tu dupliques le code actuel qui est dans loop()
  2. Tu mets un indice 2 à toutes les variables
    Par exemple coul devient coul2, etaBouton devient etaBouton2, et ainsi de suite.
    Et tu n'oublies pas BOUTON1 qui devient BOUTON2
  3. Dans les case tu décris la nouvelle séquence que tu veux faire.

Bonsoir.

Merci beaucoup pour ton retour d'expérience. Effectivement je n'avais pas connaissance de cette bibliothèque.

Je vais lire tout ça et faire des exercices sur le sujet via le simulateur.

Tu prends un pad de borne d'arcade 2 joueurs.
État initial de toute les leds blanc.
Les 8 leds défini une couleur de boutons pour le joueur 1 et les 8 autres seront là pour le joueur 2.

C'est un genre de pad borne arcade rétro-éclairé a la couleur que l'on souhaite.

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