Message scrolling avec MD MAX72XX

Bonjour
Je suis en train de m'amuser avec 4 matrices 8x8 leds reliée pour faire passer des messages dans un petit projet de gestion des scores pour du Air Hockey

J'arrive à en faire passer un en scrolling (texte défilant au début du jeu) mais impossible d'en avoir plusieurs différents qui apparaitraient plus tard au cours du jeu

Je suis obligé de "déclarer" le message à scroller dans le setup()
Ensuite dans le loop() j'ai la fonction
if (myDisplay.displayAnimate()) {
myDisplay.displayClear();}
Si j'essaye de descendre le message dans le loop ça ne fonctionne plus

je peux ajouter dans le loop d'autres affichages mais uniquement fixes du type : myDisplay.print("BUT 1");

Comment puis je avoir d'autres messages qui passent en scroll?
Merci de votre aide.
le code:
</>
//Programme pour gestion du AIR HOCKEY
// Affichage
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW

#define MAX_DEVICES 4
#define CLK_PIN 52 // or SCK UNO 13 MEGA 52
#define DATA_PIN 51 // or MOSI UNO 11 MEGA 51
#define CS_PIN 53 // or SS UNO 10 MEGA 53

MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

int But1 = 5; // le bouton du but 1 sur la broche 5
int But2 = 4; // le bouton du but 2 sur la broche 4

const int Buzzer = 22; // le buzzer sur la broche 22
const int Bouton = 6; // le bouton Start sur la broche 6
const int Start = 7; // le bouton Start sur la broche 7

//initialisation nombre de buts
int NB1 = 0;
int NB2 = 0;
int NB = 0;

String myScores;
String myScore1;
String myScore2;

void setup()
{

//affichage de bienvenue
myDisplay.begin();
myDisplay.setIntensity(4);
myDisplay.displayClear();
myDisplay.displayScroll("Bienvenue au Fuzz Air Hockey", PA_CENTER, PA_SCROLL_LEFT, 75);

// on met les boutons en entrée
pinMode(But1, INPUT);
pinMode(But2, INPUT);
pinMode(Start, INPUT);
pinMode(Bouton, INPUT);
// initialisation buzzer
pinMode(Buzzer, OUTPUT);
// on active la résistance de pull-up en mettant la broche à l'état haut
// (mais cela reste toujours une entrée
//digitalWrite(But1, HIGH);
//digitalWrite(But2, HIGH);
digitalWrite(Start, HIGH);
digitalWrite(Bouton, HIGH);

}

void loop()
{
do {
animation();
delay(75);
} while (digitalRead(Start) == HIGH);

if (digitalRead(Start) == LOW) {
myDisplay.displayClear();
myDisplay.setTextAlignment(PA_CENTER);
myDisplay.print("START!");
tone (Buzzer, 1000); // allume le buzzer actif arduino
delay(2000);
noTone(Buzzer);
delay(2000);
partie();
Finpartie();
delay(3000);
}

}

void animation()
// Animation initiale
{
if (myDisplay.displayAnimate()) {
myDisplay.displayClear();
}
}

void partie()
//Attente capteurs de but ou de reset
{
// Remise à 0 des scores
NB1 = 0;
NB2 = 0;
NB = 0;
// Affiche score initial
score();

do {
//affichage début de partie
// On lit si un but est marqué

  if (digitalRead(But1) == 1) { // si un But1 est détecté
        NB1 = NB1 + 1;
        // allume la DEL animation de but bleu

tone (Buzzer, 800); // allume le buzzer actif arduino

  myDisplay.displayClear();
  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print("BUT 1");
  delay(1500); 
  noTone(Buzzer); 
  delay(500); 

// On affiche le nouveau score
score();
                                }
  else if (digitalRead(But2) == 1) {
  NB2 = NB2 + 1;
  // allume la DEL animation de but Rouge
  tone (Buzzer, 600); // allume le buzzer actif arduino

  myDisplay.displayClear();
  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print("BUT 2");
  delay(1500);
  noTone(Buzzer);
  delay(500);
 // On affiche le nouveau score
score();
                                    }
  else if (digitalRead(Start) == LOW) {
  // Faire un reset
  // on vide les écrans
// On affiche le nouveau score
NB = 10;
myDisplay.displayClear();
  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print("Reset");
delay(3000);
 }   


if (NB1 > NB2){NB = NB1;}
else {(NB = NB2);}

} while (NB < 10); //fin boucle while partie finie

delay(2000);

Finpartie();

delay(1000);
// on vide les écrans
score();
// affichage gagnant et score
}

void score()
{// on vide les écrans
// On affiche le nouveau score
String scores;

  myDisplay.displayClear();
  myScore1 = String(NB1);
  myScore2 = String(NB2);
  
  myScores = myScore1 + " - " + myScore2;

  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print(myScores);

}

void Finpartie()
{// on vide les écrans
// On affiche le score
tone (Buzzer, 1000);
delay(500);
tone (Buzzer, 800);
delay(500);
tone (Buzzer, 600);
delay(500);
tone (Buzzer, 400);
delay(500);
tone (Buzzer, 200);
delay(500);
tone (Buzzer, 100);
delay(500);
noTone(Buzzer);
do {
//éclairage bande led en vert

  myDisplay.displayClear();
  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print("Winner");
  delay(750);
  myDisplay.displayClear();
  myDisplay.setTextAlignment(PA_CENTER);

 if (NB1 > NB2){
  myDisplay.print("Play 1");
  // allume la DEL animation de but bleu
     
        }
  else {
  myDisplay.print("Play 2");
  // allume la DEL animation de but Rouge
     
}    

myDisplay.setTextAlignment(PA_CENTER);
myDisplay.print(myScores);
// éteind les LED
    
          delay(1000);

 } while (digitalRead(Start) == HIGH);

}

</>

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

Bonjour,

Mets ton programme entre balises de code. Tel quel c'est illisible.

Bonjour et bienvenue,

Merci de prendre quelques minutes pour lire les bonnes pratiques du forum francophone et les appliquer.

En particulier, la mise en forme du code avec les balises <code/>


```cpp
//Programme pour gestion du AIR HOCKEY
// Affichage
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW

#define MAX_DEVICES 4
#define CLK_PIN 52   // or SCK UNO 13 MEGA 52
#define DATA_PIN 51  // or MOSI UNO 11 MEGA 51
#define CS_PIN 53    // or SS UNO 10 MEGA 53

MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);


int But1 = 5;  // le bouton du but 1 sur la broche 5
int But2 = 4;  // le bouton du but 2 sur la broche 4

const int Buzzer = 22;  // le buzzer sur la broche 22
const int Bouton = 6;   // le bouton Start sur la broche 6
const int Start = 7;    // le bouton Start sur la broche 7


//initialisation nombre de buts
int NB1 = 0;
int NB2 = 0;
int NB = 0;

String myScores;
String myScore1;
String myScore2;

void setup() {

  //affichage de bienvenue
  myDisplay.begin();
  myDisplay.setIntensity(4);
  myDisplay.displayClear();
  myDisplay.displayScroll("Bienvenue au Fuzz Air Hockey", PA_CENTER, PA_SCROLL_LEFT, 75);


  // on met les boutons en entrée
  pinMode(But1, INPUT);
  pinMode(But2, INPUT);
  pinMode(Start, INPUT);
  pinMode(Bouton, INPUT);
  // initialisation buzzer
  pinMode(Buzzer, OUTPUT);
  // on active la résistance de pull-up en mettant la broche à l'état haut
  // (mais cela reste toujours une entrée
  //digitalWrite(But1, HIGH);
  //digitalWrite(But2, HIGH);
  digitalWrite(Start, HIGH);
  digitalWrite(Bouton, HIGH);
}


void loop() {
  do {
    animation();
    delay(75);
  } while (digitalRead(Start) == HIGH);


  if (digitalRead(Start) == LOW) {
    myDisplay.displayClear();
    myDisplay.setTextAlignment(PA_CENTER);
    myDisplay.print("START!");
    tone(Buzzer, 1000);  // allume le buzzer actif arduino
    delay(2000);
    noTone(Buzzer);
    delay(2000);
    partie();
    Finpartie();
    delay(3000);
  }
}

void animation()
// Animation initiale
{
  if (myDisplay.displayAnimate()) {
    myDisplay.displayClear();
  }
}

void partie()
//Attente capteurs de but ou de reset
{
  // Remise à 0 des scores
  NB1 = 0;
  NB2 = 0;
  NB = 0;
  // Affiche score initial
  score();

  do {
    //affichage début de partie
    // On lit si un but est marqué

    if (digitalRead(But1) == 1) {  // si un But1 est détecté
      NB1 = NB1 + 1;
      // allume la DEL animation de but bleu
      tone(Buzzer, 800);  // allume le buzzer actif arduino


      myDisplay.displayClear();
      myDisplay.setTextAlignment(PA_CENTER);
      myDisplay.print("BUT 1");
      delay(1500);
      noTone(Buzzer);
      delay(500);

      // On affiche le nouveau score
      score();
    } else if (digitalRead(But2) == 1) {
      NB2 = NB2 + 1;
      // allume la DEL animation de but Rouge
      tone(Buzzer, 600);  // allume le buzzer actif arduino

      myDisplay.displayClear();
      myDisplay.setTextAlignment(PA_CENTER);
      myDisplay.print("BUT 2");
      delay(1500);
      noTone(Buzzer);
      delay(500);
      // On affiche le nouveau score
      score();
    } else if (digitalRead(Start) == LOW) {
      // Faire un reset
      // on vide les écrans
      // On affiche le nouveau score
      NB = 10;
      myDisplay.displayClear();
      myDisplay.setTextAlignment(PA_CENTER);
      myDisplay.print("Reset");
      delay(3000);
    }


    if (NB1 > NB2) {
      NB = NB1;
    } else {
      (NB = NB2);
    }
  } while (NB < 10);  //fin boucle while partie finie

  delay(2000);

  Finpartie();

  delay(1000);
  // on vide les écrans
  score();
  // affichage gagnant et score
}

void score() {  // on vide les écrans
  // On affiche le nouveau score
  String scores;


  myDisplay.displayClear();
  myScore1 = String(NB1);
  myScore2 = String(NB2);

  myScores = myScore1 + " - " + myScore2;

  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print(myScores);
}



void Finpartie() {  // on vide les écrans
                    // On affiche le score
  tone(Buzzer, 1000);
  delay(500);
  tone(Buzzer, 800);
  delay(500);
  tone(Buzzer, 600);
  delay(500);
  tone(Buzzer, 400);
  delay(500);
  tone(Buzzer, 200);
  delay(500);
  tone(Buzzer, 100);
  delay(500);
  noTone(Buzzer);
  do {
    //éclairage bande led en vert

    myDisplay.displayClear();
    myDisplay.setTextAlignment(PA_CENTER);
    myDisplay.print("Winner");
    delay(750);
    myDisplay.displayClear();
    myDisplay.setTextAlignment(PA_CENTER);

    if (NB1 > NB2) {
      myDisplay.print("Play 1");
      // allume la DEL animation de but bleu

    } else {
      myDisplay.print("Play 2");
      // allume la DEL animation de but Rouge
    }

    myDisplay.setTextAlignment(PA_CENTER);
    myDisplay.print(myScores);
    // éteind les LED

    delay(1000);

  } while (digitalRead(Start) == HIGH);
}

Désolé, je ne maitrise pas vraiment ces éléments.....

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