Matrice 8x8 et Télécommande

[Réglé]

Bonjour,

Merci pour votre aide. Je tourne en rond depuis une semaine sur un truc tout simple mais je n’y arrive pas !
Je souhaite utiliser dans un même projet une télécommande IR et une matrice led 8x8.
J’utilise les librairies standards : <IRremote.h> <LedControl.h>
Le programme fonctionne pendant quelques instants et puis le récepteur IR ne veut plus rien comprendre… il ne semble plus décoder le signal de la télécommande. La boucle elle n’est pas figée…
Voici mon code :

// -- IR reception --
#define IRPin 10 // Connecté à Arduino pin 10

// The library

#include <IRremote.h>
//We always have to include the library
#include <LedControl.h>

unsigned char disp1[42][8] = {
  {0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C}, //0
  {0x10, 0x18, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10}, //1
  {0x7E, 0x2, 0x2, 0x7E, 0x40, 0x40, 0x40, 0x7E}, //2
  {0x3E, 0x2, 0x2, 0x3E, 0x2, 0x2, 0x3E, 0x0}, //3
  {0x8, 0x18, 0x28, 0x48, 0xFE, 0x8, 0x8, 0x8}, //4
  {0x3C, 0x20, 0x20, 0x3C, 0x4, 0x4, 0x3C, 0x0}, //5
  {0x3C, 0x20, 0x20, 0x3C, 0x24, 0x24, 0x3C, 0x0}, //6
  {0x3E, 0x22, 0x4, 0x8, 0x8, 0x8, 0x8, 0x8}, //7
  {0x0, 0x3E, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x3E}, //8
  {0x3E, 0x22, 0x22, 0x3E, 0x2, 0x2, 0x2, 0x3E}, //9
  {0x8, 0x14, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x22}, //A
  {0x3C, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x3C, 0x0}, //B
  {0x3C, 0x40, 0x40, 0x40, 0x40, 0x40, 0x3C, 0x0}, //C
  {0x7C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7C, 0x0}, //D
  {0x7C, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x7C}, //E
  {0x7C, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x40}, //F
  {0x3C, 0x40, 0x40, 0x40, 0x40, 0x44, 0x44, 0x3C}, //G
  {0x44, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x44, 0x44}, //H
  {0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C}, //I
  {0x3C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x48, 0x30}, //J
  {0x0, 0x24, 0x28, 0x30, 0x20, 0x30, 0x28, 0x24}, //K
  {0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7C}, //L
  {0x81, 0xC3, 0xA5, 0x99, 0x81, 0x81, 0x81, 0x81}, //M
  {0x0, 0x42, 0x62, 0x52, 0x4A, 0x46, 0x42, 0x0}, //N
  {0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C}, //O
  {0x3C, 0x22, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20}, //P
  {0x1C, 0x22, 0x22, 0x22, 0x22, 0x26, 0x22, 0x1D}, //Q
  {0x3C, 0x22, 0x22, 0x22, 0x3C, 0x24, 0x22, 0x21}, //R
  {0x0, 0x1E, 0x20, 0x20, 0x3E, 0x2, 0x2, 0x3C}, //S
  {0x0, 0x3E, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, //T
  {0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x22, 0x1C}, //U
  {0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18}, //V
  {0x0, 0x49, 0x49, 0x49, 0x49, 0x2A, 0x1C, 0x0}, //W
  {0x0, 0x41, 0x22, 0x14, 0x8, 0x14, 0x22, 0x41}, //X
  {0x41, 0x22, 0x14, 0x8, 0x8, 0x8, 0x8, 0x8}, //Y
  {0x0, 0x7F, 0x2, 0x4, 0x8, 0x10, 0x20, 0x7F}, //Z
  {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, // 36 - vide
  {0x3c, 0x42, 0xa5, 0x81, 0xa5, 0x99, 0x42, 0x3c}, // 37 - Smile good
  {0x3c, 0x42, 0xa5, 0x81, 0x99, 0xa5, 0x42, 0x3c}, // 38 - Smile bad
  {0x18, 0x3c, 0x7e, 0xff, 0x18, 0x18, 0x18, 0x18}, //39 - Forward
  {0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81} // 40 - Stop
};

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 13 is connected to the DataIn
 pin 11 is connected to the CLK
 pin 12 is connected to LOAD
 We have only a single MAX72XX.
 */

LedControl lc = LedControl(13, 11, 12, 1);


IRrecv reception_ir(IRPin); // crée une instance
decode_results decode_ir; // stockage données reçues


void setup() {
  Serial.begin(9600);  // Starts serial 9600 baud
  Serial.println("Flash Gordon V1.0 Start...");
  reception_ir.enableIRIn(); // démarre la réception
  reception_ir.blink13(false);
  /*
  The MAX72XX is in power-saving mode on startup,
  we have to do a wakeup call
  */
  lc.shutdown(0, false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0, 2);
  /* and clear the display */
  lc.clearDisplay(0);
  WriteMatrix(37);
}

void loop() {
  if (reception_ir.decode(&decode_ir))
  {
    Serial.print("decode ir : ");
    Serial.println(decode_ir.value);
    switch (decode_ir.value)
    {
      case  16580863 : //// Touche On
        Serial.println("Touche On");
        break;

      case  16613503 : //// Touche Vol +
        Serial.println("Touche Vol +");
        break;

      case  16597183 : //// Touche Func/Stop
        Serial.println("Touche Func/Stop");
        break;

      case  16589023 : //// Touche FLeft
        Serial.println("Touche FLeft");
        break;

      case  16621663 : //// Touche Pause
        Serial.println("Touche Pause");
        break;

      case  16605343 : //// Touche FRight
        Serial.println("Touche FRight");
        break;

      case  16584943 : //// Touche FDown
        Serial.println("Touche FDown");
        break;

      case  16617583 : //// Touche Vol -
        Serial.println("Touche Vol -");
        break;

      case  16601263 : //// Touche FUp
        Serial.println("Touche FUp");
        break;

      case  16593103 : //// Touche 0
        Serial.println("Touche 0");
        break;

      case  16625743 : //// Touche EQ
        Serial.println("Touche EQ");
        break;

      case  16609423 : //// Touche ST
        Serial.println("Touche ST");
        break;

      case  16582903 : //// Touche 1
        Serial.println("Touche 1");
        WriteMatrix(1);
        break;

      case  16615543 : //// Touche 2
        Serial.println("Touche 2");
        WriteMatrix(2);
        break;

      case  16599223 : //// Touche 3
        Serial.println("Touche 3");
        WriteMatrix(3);
        break;
      case  16591063 : //// Touche 4
        Serial.println("Touche 4");
        WriteMatrix(4);
        break;

      case  16623703 : //// Touche 5
        Serial.println("Touche 5");
        WriteMatrix(37);
        break;

      case  16607383 : //// Touche 6
        Serial.println("Touche 6");
          WriteMatrix(6);
        break;

      case  16586983 : //// Touche 7
        Serial.println("Touche 7");
          WriteMatrix(7);
        break;

      case  16619623 : //// Touche 8
        Serial.println("Touche 8");
          WriteMatrix(8);
        break;

      case 16603303 : //// Touche 9
        Serial.println("Touche 9");
          WriteMatrix(9);
        break;
    }
    reception_ir.resume(); // reçoit le prochain code
  }
}

// #############################################################################
// ###                     Matrix 8x8 Max7219 procedur                       ###
// #############################################################################

void WriteMatrix(int cod)
{
  unsigned char DATA ;

  for (int ii = 0 ; ii <= 7 ; ii++)
  {
    DATA = disp1[cod][ii];
    lc.setRow(0, ii, DATA);
  }
}

bonjour,
teste ca

void WriteMatrix(int cod)
{
  unsigned char DATA ;

  for (int ii = 0 ; ii <= 7 ; ii++)
  {
    DATA = disp1[cod][ii];
    lc.setRow(0, ii, DATA);
  }
reception_ir.resume(); // reçoit le prochain code
}

Merci pour ta réponse. Je viens de tester mais cela ne marche pas :confused:

:o Je post quelques infos de plus vous aider à m'aider :kissing: Ici la référence de la matrice utilisée : https://hackspark.fr/fr/max7219-8x8-matrix-display-module-red-dot.html

Ici la référence de la télécommande utilisée :http://www.dirobots.com/arduino/14-kit-infrarouge-pour-arduino.html?search_query=telecommande&results=6

Lorsque je teste les deux séparément cela marche, ensemble cela marche pendant 20sec après cela ne marche plus !

J'espère que quelqu'un à une solution...

Thierry

si j'ai le temps demain je fais un essai;

8) J'ai trouvé ! C'était un problème d'alimentation. La matrice semble consommer plus que ce que peut délivrer l'alimentation USB. J'ai utiliser pour mon nouveau test une pile de 9V connectée à un 7805 sans rien de plus... Et cela marche nickel...

Merci pour votre aide....

Thierry