2LEDs RGB indépendantes

Salut, on a un projet: on veut recréer le mastermind (le jeu) avec des LEDs et des boutons. Le but étant d'avoir deux joueurs, un qui entre le code secret de 4 couleurs et l'autre joueur qui devine le code secret. Donc notre système fonctionne avec des LED RGB (celles qu'on a ont déjà une résistance intégrée) et deux boutons, un qui permet de changer la couleur de la LED activée parmi 4 couleurs et un deuxième qui permet de valider le choix de la couleur et de passer à la LED suivante pour choisir sa couleur et ainsi de suite.

Le problème qu'on a c'est pour coder les deux LEDs indépendamment l'une de l'autre. >:( >:( On voudrait changer la couleur d'une LED avec un bouton puis cliquer sur un bouton valider pour bloquer la couleur de la LED actuelle et passer à choisir la couleur d'une 2eme LED. Je vais insérer le code qu'on a (je sais qu'on peut sûrement faire plus court mais pour l'instant ça marche comme ça), on a utilisé des boucles et des compteurs. Pour l'instant tout marche parfaitement avec 2 LED mais au final on voudrait en avoir 4 mais on a utilisé quasi tous les ports (avec le symbole vague PMW nécessaire pour avoir les couleurs qu'on veut) sur la carte arduino.

On voudrait savoir comment on peut faire au niveau des branchements pour avoir les LED branchées sur des "pins" différents pour pouvoir coder le choix des couleurs indépendamment les une des autres et ce que ça risque de changer dans notre code.

MERCI!

[u]LE CODE[/u]

const int buttonPin = 2;
const int buttonPin2 = 8;
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
const int redPin2 = 5;
const int greenPin2 = 3;
const int bluePin2 = 6;

int counter = 0;
int counter2 = 0;
int buttonState=0;
int buttonState2=0;
int lastButtonState=0;
int lastButtonState2=0;


void setup() {
  // put your setup code here, to run once:
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(redPin2, OUTPUT);
  pinMode(greenPin2, OUTPUT);
  pinMode(bluePin2, OUTPUT);
}

void setColor(int red, int green, int blue)
{
#ifdef COMMON_ANODE
  red = 255 - red;
  green = 255 - green;
  blue = 255 - blue;
#endif
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}
void setColor2(int red2, int green2, int blue2)
{
#ifdef COMMON_ANODE
  red2 = 255 - red2;
  green2 = 255 - green2;
  blue2 = 255 - blue2;
#endif
  analogWrite(redPin2, red2);
  analogWrite(greenPin2, green2);
  analogWrite(bluePin2, blue2);
}


void loop() {
  // put your main code here, to run repeatedly:
  buttonState = digitalRead(buttonPin);  
  buttonState2 = digitalRead(buttonPin2);
  if (buttonState2 != lastButtonState2){
    if (buttonState2 == HIGH) {
    counter2++;
    }
    else{
      counter2=counter2;
    }
  lastButtonState2 = buttonState2;
  }
  if (counter2==1){
    if (buttonState != lastButtonState) {
      if (buttonState == HIGH) {
        counter++;
      }
      else{
        counter=counter;
      }
    lastButtonState = buttonState;
    }
  
    if(counter==0){
      setColor(0,0,0);
    }
    else if (counter%4==1){
      setColor(255,0,255);
    }
    else if (counter%4==2){
      setColor(1,102,102);
    }
    else if (counter%4==3 ){
      setColor(0,255,0);
    }
    else if (counter%4==0){
      setColor (255,255,0);
    }
  }
  
  else if (counter2==2) {
    if (buttonState != lastButtonState) {
      if (buttonState == HIGH) {
        counter++;
      }
      else{
        counter=counter;
      }
    lastButtonState = buttonState;
    }
  
    if(counter==0){
      setColor2(0,0,0);
    }
    else if (counter%4==1){
      setColor2(255,0,255);
    }
    else if (counter%4==2){
      setColor2(1,102,102);
    }
    else if (counter%4==3 ){
      setColor2(0,255,0);
    }
    else if (counter%4==0){
      setColor2(255,255,0);
  }
}

}

vous pouvez vous passer de PWM (les pins avec ~) si vous prenez des couleurs “franches” en mettant à fond certaines couleurs.

Vous avez 3 canaux: R pour rouge, G pour vert et B pour bleu (R,G,B)

En mélangeant les couleurs on en obtient d’autres, par exemple si vous mettez

(HIGH, LOW, LOW) = Rouge
(LOW, HIGH, LOW) = Vert
(LOW, LOW, HIGH) = Bleu
(HIGH, HIGH, LOW) = Jaune
(LOW, HIGH, HIGH) = Cyan
(HIGH, LOW, HIGH) = Magenta
(HIGH, HIGH, HIGH) = Blanc

ça fait déjà 7 “couleurs”, c’est pas mal. Avec (LOW, LOW, LOW) => c’est éteint (Noir) et vous pouvez aussi proposer cette option pour avoir 8 choix.

sinon pour simplifier votre gestion des boutons, éventuellement utilisez des INPUT_PULLUP de la carte (pas besoin de résistance en plus comme ça) et la librairie de @bricoleau ou alors la librairie OneButton de Matthias Hertel.

c’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

Le but du jeu est de deviner, par déductions successives, en 12 coups au plus, la couleur et la position des 5 pions cachés derrière un écran. On peut avoir une formule moins difficile en ne cachant que 3 ou 4 pions et en n’utilisant que 6 couleurs au lieu de 8. C’est une question de convention préalable.

le souci que vous allez avoir c’est que dans le jeu on a pour chaque ligne un résumé visuel du nombre de bien placés et du nombre de couleurs justes. En effet si l’un des pions correspond par sa position et sa couleur à un pion caché derrière l’écran, le codificateur l’indique en plaçant une fiche noire dans l’un des trous sur le côté du plateau. Si l’un des pions correspond uniquement par sa couleur, le codificateur l’indique par une fiche blanche dans l’un des trous de marque.

c’est important d’avoir cet historique des coups joués et de l’évaluation des couleurs pour pouvoir faire des hypothèses et trouver le résultat.

==> il vous faudrait en fait vraiment plein de LEDs pour cela et des petits afficheurs ou 60 petites LEDs (12 rangées de 5 pions). Vous pourriez envisager de mettre des bandeaux de LEDs type APA102 ou similaire.

Attention dans tous les cas avoir autant de LEDs à allumer nécessitera d’avoir une alimentation séparée des LEDs

Si vous partez sur des LEDs il y a aussi des petits driver PWM de LEDs à 24 sorties (donc 8 LEDs RGB en PWM) genre TLC5947 - ils sont chaînables donc en en mettant assez on peut gérer tout un plateau…

==> à mon avis c’est bcp de LEDs et de puissance, un petit écran TFT et faire ça en dessin sera plus simple :slight_smile: