Stockage tableau byte dans EEPROM

Bonjour,
J'aimerai stocker un tableau byte dans la mémoire EEPROM de mon Arduino car ces tableau sature la mémoire ram de mon Arduino Uno.
Voici un exemple d'un de mes tableau:

byte tab3[16][8]={
{0,7,7,7,7,7,0,0},
{7,7,7,7,7,7,7,0},
{0,0,0,0,0,7,7,0},
{0,0,0,0,0,7,7,0},
{0,0,0,0,7,7,0,0},
{0,0,0,0,7,7,0,0},
{0,0,7,7,7,7,0,0},
{0,0,7,7,7,7,0,0},
{0,0,0,0,0,7,7,0},
{0,0,0,0,0,0,7,7},
{0,0,0,0,0,0,7,7},
{0,0,0,0,0,0,7,7},
{7,0,0,0,0,0,7,7},
{7,0,0,0,0,7,7,0},
{0,7,7,7,7,7,0,0},
{0,0,7,7,7,0,0,0}
};

Merci d'avance de votre aide :wink:

Bonjour,

Si c'est pour faire une police de caractères tu peux gagner énormément de place en stockant tes infos sur un bit ce qui te donne 16 octets au lieu de 16*8 octets

byte tab3[16]={
  B01111100,
  B11111110,
  B00000110,
  B00000110,
  B00001100,
  B00001100,
  B00111100,
  B00111100,
  B00000110,
  B00000011,
  B00000011,
  B00000011,
  B10000011,
  B10000110,
  B01111100,
  B00111000
};

J'ai réécris mon tableau comme tu me l'a dit. Le problème c'est que la suite de mon programme n'est pas adapté, j'ai donc l'erreur:
invalid types 'byte {aka unsigned char}[int]' for array subscript

oui, il faut que tu l'adaptes pour lire bit à bit. un traitement de ce genre:

  for (int l=0; l<16; l++)
  {
    byte octet=tab3[l];
    for (int c=0; c<8; c++)
    {
      if (bitRead(octet,7-c)) // 7-c pour commencer par le bit de poids fort (à gauche)
      {
        // traite le 7
      }
      else
      {
        // traite le 0
      }
    }
  }

@kamill
Je n'ai pas bien compris la structure de l'instruction if "(bitRead(octet, 7-c))". D'après ce que j'ai compris je dois allumé une led quand le bit est à 1 et laisser éteint si le bit est à 0.

Je voulais savoir aussi si par "traite le 7" tu ne voulais pas plutôt parler des bit à 1 ?

Je début dans la programmation en C (grâce à mon procès de BTS) j'ai donc quelque base qui ne sont pas bien approfondit comme tu a pu t'en rendre compte.

J'ai mis traite le 7 car il y a 7 dans ta table initiale. Je suppose que tu dois bien faire quelque chose de ce 7. Il faut donc faire la même chose quand le bit est à 1 (écrire 7 quelque-part?)

En fait les 7 de ma table servais initialement à afficher LED par LED sur ma matrice, pour te mettre dans le contexte voici mon programme:

#include <Adafruit_GFX.h>
#include <RGBmatrixPanel.h>
#include <SPI.h>
#define CLK 8
#define LAT A3
#define OE  9
#define A   A0
#define B   A1
#define C   A2

float NiveauSonore=0; //Variable re
int a=NiveauSonore; 

byte tabdb[16][5]={
  {0,0,0,0,7},
  {0,0,0,0,7},
  {0,7,7,0,7},
  {7,0,0,7,7},
  {7,0,0,0,7},
  {7,0,0,7,7},
  {0,7,7,0,7},
  {0,0,0,0,0},
  {0,0,0,0,0},
  {7,7,7,7,0},
  {7,0,0,0,7},
  {7,0,0,0,7},
  {7,7,7,7,0},
  {7,0,0,0,7},
  {7,0,0,0,7},
  {7,7,7,7,0}
};

byte tab0[16][8]={
  {0,0,7,7,7,7,0,0},
  {0,7,7,7,7,7,7,0},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {7,7,0,0,0,0,7,7},
  {0,7,7,7,7,7,7,0},
  {0,0,7,7,7,7,0,0}
};

byte tab1[16][8]={
  {0,0,0,7,7,0,0,0},
  {0,0,7,7,7,0,0,0},
  {0,7,7,7,7,0,0,0},
  {7,7,7,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {7,7,7,7,7,7,7,7},
  {7,7,7,7,7,7,7,7}
};

byte tab2[16][8]={
  {7,7,7,7,7,7,7,7},
  {7,0,0,0,0,0,7,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,7,7},
  {0,7,7,7,7,7,7,7},
  {7,7,7,7,7,7,7,0},
  {7,7,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,7,0,0,0,0,0,7},
  {7,7,7,7,7,7,7,7}
};

byte tab3[16]={
  B01111100,
  B11111110,
  B00000110,
  B00000110,
  B00001100,
  B00001100,
  B00111100,
  B00111100,
  B00000110,
  B00000011,
  B00000011,
  B00000011,
  B10000011,
  B10000110,
  B01111100,
  B00111000
};

byte tab4[16][8]={
  {0,0,0,0,0,0,7,0},
  {0,0,0,0,0,7,7,0},
  {0,0,0,7,7,7,7,0},
  {0,0,7,7,7,7,7,0},
  {0,7,7,0,0,7,7,0},
  {7,7,0,0,0,7,7,0},
  {7,7,0,0,0,7,7,0},
  {7,7,0,0,0,7,7,0},
  {7,0,0,0,0,7,7,0},
  {7,0,0,0,0,7,7,0},
  {7,7,7,7,7,7,7,7},
  {7,7,7,7,7,7,7,7},
  {0,0,0,0,0,7,7,0},
  {0,0,0,0,0,7,7,0},
  {0,0,0,0,0,7,7,0},
  {0,0,0,0,0,7,7,0}
};
byte tab5[16][8]={
  {7,7,7,7,7,7,7,7},
  {7,7,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,7,7,7,7,7},
  {7,7,7,7,7,7,7,7},
  {7,7,7,0,0,0,0,7},
  {0,7,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,7,7},
  {7,7,7,7,7,7,7,7}
};

byte tab6[16][8]={
  {7,7,7,7,7,7,7,7},
  {7,7,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,0,0,0,0,0,0,0},
  {7,7,7,7,7,7,7,7},
  {7,7,0,0,0,0,7,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,7,0,0,0,0,7,7},
  {7,7,7,7,7,7,7,7}
  };
  
byte tab7[16][8]={
  {7,7,7,7,7,7,7,7},
  {7,7,7,7,7,7,7,7},
  {7,0,0,0,0,0,7,7},
  {0,0,0,0,0,0,7,7},
  {0,0,0,0,0,7,7,0},
  {0,0,0,0,0,7,7,0},
  {0,0,0,0,0,7,7,0},
  {0,0,0,0,7,7,0,0},
  {0,0,0,0,7,7,0,0},
  {0,0,0,0,7,7,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,0,7,7,0,0,0},
  {0,0,7,7,0,0,0,0},
  {0,0,7,7,0,0,0,0},
  {0,0,7,7,0,0,0,0}
};

byte tab8[16][8]={
  {7,7,7,7,7,7,7,7},
  {7,7,0,0,0,0,7,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,7,0,0,0,0,7,7},
  {7,7,7,7,7,7,7,7},
  {7,7,0,0,0,0,7,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,7,0,0,0,0,7,7},
  {7,7,7,7,7,7,7,7}
  };
  
byte tab9[16][8]={
  {7,7,7,7,7,7,7,7},
  {7,7,0,0,0,0,7,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,0,7},
  {7,7,0,0,0,0,7,7},
  {7,7,7,7,7,7,7,7},
  {0,0,0,0,0,0,7,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {0,0,0,0,0,0,0,7},
  {7,0,0,0,0,0,7,7},
  {7,7,7,7,7,7,7,7}
  };

int x, y;
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

void setup () {
  matrix.begin();
  SPI.begin();
  SPI.setBitOrder(LSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  pinMode(10,INPUT);
  Serial.begin(115200);
}

void loop() 
{
  if(digitalRead(10)!=HIGH)
  {
    NiveauSonore = (SPI.transfer(0)*0.507);
    if(NiveauSonore-a >0.5)
    {
      NiveauSonore=(int)NiveauSonore+0.5;
    }
    if(NiveauSonore-a <0.5)
    {
      NiveauSonore=(int)NiveauSonore-0.5;
    }
    //Serial.println(NiveauSonore);
  }
for (int j=0; j <= 15; j++) 
  for (int i=0; i <= 7; i++){
   x=i;
   y=j;
   matrix.drawPixel(x, y, matrix.Color333(tab1[j][i],0,0));
 }
for (int j=0; j <= 15; j++) 
  for (int i=0; i <= 7; i++){
   x=i+9;
   y=j;
   matrix.drawPixel(x, y, matrix.Color333(tab3[j][i],0,0));
 }
for (int j=0; j <= 15; j++) 
  for (int i=0; i <= 7; i++){
   x=i+18;
   y=j;
   matrix.drawPixel(x, y, matrix.Color333(tab0[j][i],0,0));
 }
 for (int j=0; j <= 15; j++) 
  for (int i=0; i <= 4; i++){
   x=i+27;
   y=j;
   matrix.drawPixel(x, y, matrix.Color333(tabdb[j][i],tabdb[j][i],tabdb[j][i]));
 }
}

Maintenant il me suffirai juste d'allumer la LED qui correspond au bit à 1 et de laisser éteint celle qui est à 0.

Tu fais la même chose sauf qu'au lieu d'écrire la valeur de ta table, tu écris 0 ou 7 suivant la valeur du bit.

  for (int j = 0; j < 16; j++)
  {
    byte octet = tab3[j];
    for (int i = 0; i < 8; i++) {
      x = i + 9;
      y = j;
      byte val;
      if (bitRead(octet, 7 - i)) // 7-c pour commencer par le bit de poids fort (à gauche)
        val = 7;
      else
        val = 0;
      matrix.drawPixel(x, y, matrix.Color333(val, 0, 0));
    }
  }

Je viens d'essayer, ça marche parfaitement bien, Merci de ton aide ! Je vais l'examinée en détail histoire de bien comprendre pour pouvoir commenter chaque ligne.