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
}
}
ç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()
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 ?