acess prognem tableau

Salut à tous,

Je bute sur un petit problème basique mais que je n'arrive pas à résoudre.
Mon tableau:

static const PROGMEM uint16_t font[] = {0xF6F, 0x597, 0xC57, 0xE8E, 0x53A, 0xF8E, 0x7AA, 0xE54, 0xFEF, 0xF79};

Et lorsque j'essaye d'y accéder en dur il fonctionne mais dès que je met une variable il prend des valeurs beaucoup trop haute. Ce qui est bizare c'est que les Serial.print me donnent une valeur correcte.

byte count = 0;
void loop() {
  if (push.isRelease()) {
    count++;
    matrix.clear();
    drawLetter(0, 0, font[count], LED_GREEN);//si je met count en chiffre j'ai la valeur correcte
 mais impossible d'incrémenter correctement, c'est un problème de type je crois
  }
}

PROGMEM indique que les donées sont en mémoire programme. Pour y accéder, il faut rajouter
#include <avr/pgmspace.h>

Et le tableau, au lieu de se lire
font[count]
il se lit:
pgm_read_word_near(font + count);

ça fonctionne quand vous mettez un chiffre dansdrawLetter(0, 0, font[count], LED_GREEN);//si je met count en chiffre j'ai la valeur correcteparce que le compilateur est smart et voit qu'il n'a pas besoin d'aller faire une indirection pour trouver cette valeur puisqu'il sait exactement laquelle c'est déjà. II met la bonne valeur à la place dans l'appel de fonction. Et si vous n'utilisez pas le reste du tableau et il ne le crée même pas.

Mais si c'est un indice variable, là effectivement il faut aller le chercher en mémoire flash. Comme vous avez déclaré un tableau d'entier sur 16 bits, il faut effectivement utiliser pgm_read_word_near(). Si cela avait été des octets, vous auriez utilisé pgm_read_byte_near()

J’ai juste changé cette ligne et ça marche :

drawLetter(0, 0, pgm_read_word_near(font+count), LED_GREEN);


#include <avr/pgmspace.h>// n'apporte rien de plus, je suppose qu'elle n'est pas nécessaire ?

Merci pour l’aide !

n’apporte rien de plus, je suppose qu’elle n’est pas nécessaire ?

#include <avr/pgmspace.h>

l’IDE va le faire pour vous en incluant <Arduino.h>. Donc pas obligatoire.