RESOLU PAROLA avec ESP8266 wemos D1

Bonjour,

Je découvre les matrices de led 8x8 pilotées par MAX7219.

J’ai essayé de nombreuses bibliothèques avec une UNO pour finalement choisir celle qui me donne le plus satisfaction : MD_72XX et sa superbe extension PAROLA.

J’avais acheté une carte WEMOS D1 ESP8266 avec connectique compatible UNO, il y a déjà quelques mois mais je ne l’avais jamais vraiment essayée.

J’ai donc relié la D1 aux matrices et lancé le sketch d’exemple : MX_MAX72XX_Message_ESP8266.
Tout fonctionne parfaitement.

Le problème se pose quand j’utilise le sketch d’exemple : Parola_Animation_Catalog .

LE programme se lance correctement mais reboote (en mème temps que la led bleu du module ESP s’eclaire) au bout de 1 à 2 secondes.

J’ai lu que l’ESP reboote si son temps de cycle est trop long (cela ressemble à un WATCHDOG ?!!)
et que l’instruction yield(); permet d’éviter le plantage de l’ESP.

J’ai fait différents essais avec yield(); mais je n’ai pas touvé la solution qui évite le reboote.

configuration : win 7 home premuim 64 bits IDE 1.8.4 WEMOS D1 ancienne version

LE code ci-dessous :

```
*// Program to show full catalog of the MD_Parola animations
//
// NOTE: MD_MAX72xx library must be installed and configured for the LED
// matrix type being used. Refer documentation included in the MD_MAX72xx
// library or see this link:
// MD_MAX72xx LED Matrix Arduino Library: Hardware
//

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define MAX_DEVICES 4
#define CLK_PIN  D5
#define DATA_PIN  D7
#define CS_PIN    D8

// Hardware SPI connection
MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);
// Arbitrary output pins
// MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

#define ARRAY_SIZE(x)  (sizeof(x)/sizeof(x[0]))

// Global data
typedef struct
{
  textEffect_t  effect;  // text effect to display
  char *        psz;      // text string nul terminated
  uint16_t      speed;    // speed multiplier of library default
  uint16_t      pause;    // pause multiplier for library default
} sCatalog;

sCatalog  catalog =
{
  { PA_PRINT, “PRINT”, 1, 1 },
  { PA_SLICE, “SLICE”, 1, 1 },
  { PA_MESH, “MESH”, 20, 1 },
  { PA_FADE, “FADE”, 20, 1 },
  { PA_WIPE, “WIPE”, 5, 1 },
  { PA_WIPE_CURSOR, “WPE_C”, 4, 1 },
  { PA_OPENING, “OPEN”, 3, 1 },
  { PA_OPENING_CURSOR, “OPN_C”, 4, 1 },
  { PA_CLOSING, “CLOSE”, 3, 1 },
  { PA_CLOSING_CURSOR, “CLS_C”, 4, 1 },
  { PA_RANDOM, “RAND”, 3, 1 },
  { PA_BLINDS, “BLIND”, 7, 1 },
  { PA_DISSOLVE, “DSLVE”, 7, 1 },
  { PA_SCROLL_UP, “SC_U”, 5, 1 },
  { PA_SCROLL_DOWN, “SC_D”, 5, 1 },
  { PA_SCROLL_LEFT, “SC_L”, 5, 1 },
  { PA_SCROLL_RIGHT, “SC_R”, 5, 1 },
  { PA_SCROLL_UP_LEFT, “SC_UL”, 7, 1 },
  { PA_SCROLL_UP_RIGHT, “SC_UR”, 7, 1 },
  { PA_SCROLL_DOWN_LEFT, “SC_DL”, 7, 1 },
  { PA_SCROLL_DOWN_RIGHT, “SC_DR”, 7, 1 },
  { PA_SCAN_HORIZ, “SCNH”, 4, 1 },
  { PA_SCAN_HORIZX, “SCNHX”, 4, 1 },
  { PA_SCAN_VERT, “SCNV”, 3, 1 },
  { PA_SCAN_VERTX, “SCNVX”, 3, 1 },
  { PA_GROW_UP, “GRW_U”, 7, 1 },
  { PA_GROW_DOWN, “GRW_D”, 7, 1 },
};

void setup(void)
{
  P.begin();
  P.setInvert(false);

for (uint8_t i = 0; i < ARRAY_SIZE(catalog); i++)
  {
    catalog[i].speed *= P.getSpeed();
    catalog[i].pause *= 500;
  }
}

void loop(void)
{
  for (uint8_t j = 0; j < 3; j++)
  {
    textPosition_t  just;

switch (j)
    {
      case 0: just = PA_LEFT;    break;
      case 1: just = PA_CENTER;  break;
      case 2: just = PA_RIGHT;  break;
    }

for (uint8_t i = 0; i < ARRAY_SIZE(catalog); i++)
    {
      P.displayText(catalog[i].psz, just, catalog[i].speed, catalog[i].pause, catalog[i].effect, catalog[i].effect);
      while (!P.displayAnimate())
        ; // animates and returns true when an animation is completed
      delay(catalog[i].pause);
    }
  }
}*
```
Pierre
Parola_Animation_Catalog.ino (2.77 KB)

J’ai la solution : en fait, j’ai honte ::slight_smile: car je n’utilise JAMAIS de while et je ne connais pas sa syntaxe.

Il suffit de mettre le fameux yield(); à la suite du while et cela fonctionne parfaitement.

Pierre