[RESOLU] Clignotement d'un dessin sur une matrice de leds

Bonjour a tous

Mon projet, une matrice de leds de 16x16 que je vais mettre a l’arrière sur un vélo.
Si je n’appuie pas sur aucun bouton une flèche indique que j’avance, appuie sur bouton gauche flèche gauche de mème pour droite et pour l’arrêt un panneau stop apparait et j’aimerais qu’il clignote.
Le problème c’est que je n’arrive pas a trouver la bonne commande pour le faire, j’ai tester avec matrix.clear, matrix.clr, matrix.off, rien a faire et j’ai vue qu’il y avais fastled.clear, j’ai modifier mon bout de code et je ne trouve pas comment faire.
Voici programme complet;

// Déclencher l'allumage du paneau de LED à l'aide de 4 interrupteurs
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define PIN 8

// Initialisation des constantes :
const int Gauche = 7;     // Numéro de la broche à laquelle est connecté le bouton poussoir 1
const int Droite = 6;     // Numéro de la broche à laquelle est connecté le bouton poussoir 2
const int Arret = 5;     // Numéro de la broche à laquelle est connecté le bouton poussoir 3

// Déclaration des variables :
int etatGauche = 0;         // variable qui sera utilisée pour stocker l'état du bouton 1
int etatDroite = 0;         // variable qui sera utilisée pour stocker l'état du bouton 2
int etatArret = 0;         // variable qui sera utilisée pour stocker l'état du bouton 3

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
                            NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
                            NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
                            NEO_GRB  + NEO_KHZ800);


const uint16_t colors[] = {
  matrix.Color(0, 255, 0)
};

// le code dans cette fonction est exécuté une fois au début
void setup() {
  // indique que la broche ledVerte, ledJaune et ledRouge sont des sorties :

  // indique que la broche bouton est une entrée :
  pinMode(Gauche, INPUT);
  pinMode(Droite, INPUT);
  pinMode(Arret, INPUT);
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(25);
  matrix.setTextColor(colors[0]);
}
int x    = matrix.width();
int pass = 0;

// le code dans cette fonction est exécuté en boucle
void loop() {
  // lit l'état du bouton et stocke le résultat dans etatBouton
  etatGauche = digitalRead(Gauche);
  etatDroite = digitalRead(Droite);
  etatArret = digitalRead(Arret);

  // Si etatBouton1 est à 5V (HIGH) c'est que le bouton est appuyé
  if (etatGauche == HIGH) {
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
  NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);
 
const uint16_t colors[] = {
matrix.Color(0, 255, 0)};

  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(25);
  matrix.setTextColor(colors[0]);
    matrix.fillScreen(0);
    matrix.setCursor(x, 4);
    matrix.print(F("<<<<<"));

    if (--x < -30
       ) {
      x = matrix.width();
    matrix.setTextColor(colors[pass]);

    }
    matrix.show();
    delay(20);

  }
  else if (etatDroite == HIGH) {
    Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
   NEO_MATRIX_BOTTOM    + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB  + NEO_KHZ800);

const uint16_t colors[] = {
 matrix.Color(0, 255, 0) };

  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(25);
  matrix.setTextColor(colors[0]);
   matrix.fillScreen(0);
  matrix.setCursor(x, 4);
  matrix.print(F("<<<<<"));
  if(--x < -30) {
    x = matrix.width();
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(20);
  }
  else if (etatArret == HIGH) {
    Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
   NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB  + NEO_KHZ800);

const uint16_t colors[] = {
 matrix.Color(255, 0, 0) };

  matrix.begin();
    matrix.setBrightness(5);
  matrix.drawLine(5, 1, 9, 1, matrix.Color(255, 0, 0));
  matrix.drawLine(4, 2, 10, 2, matrix.Color(255, 0, 0));
  matrix.drawLine(3, 3, 11, 3, matrix.Color(255, 0, 0));
  matrix.drawLine(2, 4, 12, 4, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 5, 13, 5, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 6, 13, 6, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 7, 13, 7, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 8, 13, 8, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 9, 13, 9, matrix.Color(255, 0, 0));
  matrix.drawLine(2, 10, 12, 10, matrix.Color(255, 0, 0));
  matrix.drawLine(3, 11, 11, 11, matrix.Color(255, 0, 0));
  matrix.drawLine(4, 12, 10, 12, matrix.Color(255, 0, 0));
  matrix.drawLine(5, 13, 9, 13, matrix.Color(255, 0, 0));
   matrix.show();
  delay(20);
  }
  else {
    // ***** avance
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
  NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);
 
const uint16_t colors[] = {
matrix.Color(0, 255, 0)};
   matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(25);
  matrix.setTextColor(colors[0]);

    matrix.fillScreen(0);
    matrix.setCursor(x, 4);
    matrix.print(F("<<<<<"));

    if (--x < -30
       ) {
      x = matrix.width();
    matrix.setTextColor(colors[pass]);

    }
    matrix.show();
    delay(20);

  }
}

Voici la parti du programme que je veux faire clignoter;

 else if (etatArret == HIGH) {
    Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
   NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB  + NEO_KHZ800);

const uint16_t colors[] = {
 matrix.Color(255, 0, 0) };

  matrix.begin();
    matrix.setBrightness(5);
  matrix.drawLine(5, 1, 9, 1, matrix.Color(255, 0, 0));
  matrix.drawLine(4, 2, 10, 2, matrix.Color(255, 0, 0));
  matrix.drawLine(3, 3, 11, 3, matrix.Color(255, 0, 0));
  matrix.drawLine(2, 4, 12, 4, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 5, 13, 5, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 6, 13, 6, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 7, 13, 7, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 8, 13, 8, matrix.Color(255, 0, 0));
  matrix.drawLine(1, 9, 13, 9, matrix.Color(255, 0, 0));
  matrix.drawLine(2, 10, 12, 10, matrix.Color(255, 0, 0));
  matrix.drawLine(3, 11, 11, 11, matrix.Color(255, 0, 0));
  matrix.drawLine(4, 12, 10, 12, matrix.Color(255, 0, 0));
  matrix.drawLine(5, 13, 9, 13, matrix.Color(255, 0, 0));
   matrix.show();
  delay(20);
  }

Quelqu’un aurait-il une idée de la commande ou un site qui pourrais m’aider a comprendre, je vous remercie d’avance de l’aide que vous pourrez m’apporter pour finir mon projet.

Il ne faut instancier l'objet matrix qu'une seule fois à l'initialisation. Cette ligne ne doit apparaître qu'une seule fois au début du programme.

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
  NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

Pour faire clignoter un objet, tu ne peux pas jouer avec setBrightness qui est destructif. Il faut donc redessiner le symbole une fois avec la couleur 0,0,0 et une fois avec 255, 0, 0.

Merci pour l'info, je n'avais pas remarquer que 0,0,0 pouvais éteindre les leds si je peux dire.

Si tu va sur le site brainy-bits.com, il y a une animation.

https://www.brainy-bits.com/arduino-16x16-matrix-frame/

Tu verra que il y a l'instruction ( FastLED.clear(); ), alors je me disait qu'il y a surement la mème chose avec la bibliothèque matrix.

De plus si je met qu'une fois le code suivant:

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);

Mes flèches vont aller dans la mème direction, vers le haut.

FastLED est une bibliothèque de gestion des rubans ou anneaux de leds. Tu utilises Adafruit Neopixel et Adafruit Neomatrix qui sont d’autres bibliothèques de gestion de leds.

Tu ne peux pas utiliser l’une ET les autres. En effet, tu déclares tes leds avec un constructeur qui dépend du choix de la bibliothèque. Donc c’est FastLED ou Adafruit, mais pas les deux.

Pour effacer toutes les leds, il existe peut-être une fonction similaire chez Adafruit, cherche sur leur site. Je vois une fonction ‘clear()’ ici

Je viens juste de trouver, javais déjà écrit matrix.clear(); mais rien ne se produisait, apres avoir examiner le code du liens citer plus haut, mon erreur, étais qu' il fallait mettre matrixshow(); .

Je viens d'aller voir ton liens, dans le code il n'y a pas le mot matrix devant, probablement a cause de l'endroit ou du code, je ne suis pas asser avancer pour le dire et merci pour l'info sur les bibliothèques.
Poste résolue.

Le mot matrix, c'est le nom que tu donnes à ton instance de Neomatrix ici

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,...

Donc il ne faut pas s'y attacher, l'important c'est ce qui vient juste après...