Aide Matrice 8x8 bi-color d'adafruit

Salut à tous !

J'ai besoin d'aide. J'ai une matrice 8x8 reliée en I2C via un shield grove sur un arduino UNO, jusque là tout va bien.

Le problème c'est que je ne vois pas comment faire en sorte d'afficher 2 carrés, un que je peux déplacer et l'autre qui reste à la même place.

Mon but étant de faire un tétris avec ceci c'est plutôt mal parti :confused:

Pour le moment je sais afficher les carrés, je sais les déplacer en même temps mais j'ai peur qu'il me faille un tableau avec les anciennes coordonnées des carrés pour les afficher continuellement quand je refresh la matrice (matrix.clear() avec la librairie adafruit qui est une véritable horreur).

Quelqu'un peux t-il m'aider ? Me donner une piste ?

8x8 c'est peu pour un tetris. On trouve plein de tetris sur arduino avec Google

Je sais que c’est petit mais je fais avec les moyens du bord. Et c’est pour m’entraîner. J’ai regarder sur google mais aucun tétris n’est fait avec ce que j’ai. Je suis en train d’essayer un truc mais ça ne fonctionne pas :

/*
titre :Matrice 8x8
*/

// ajout des librairies
#include <Wire.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"

Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix();

// déclaration de variables globales
int y=0;//pour dessendre
int x=3;//gauche et droite
int bpdroit=4;//à changer valeur de la pin
int bpgauche=2;//à changer valeur de la pin
bool etatbpdroit=0;//l'état du bouton
bool etatbpgauche=0;//l'état du bouton
int temps2=0;//dépacement vers le bas toutes les secondes
bool passage=0;//sécurité
int tabx[]{0};
int taby[]{0};
int pointeur=0;
// déclaration des constantes



// setup

void setup()
{
  matrix.begin(0x70);//I2C address
  pinMode(bpdroit,INPUT);
  pinMode(bpgauche,INPUT);
  Serial.begin(9600);
}

// déclaration des fonctions
void carre(int couleur)
{
  matrix.drawRect(y,x, 2,2, couleur);
  matrix.writeDisplay();
}


void verifdepacementcarre()//fonction vérifier si le déplacement ne sort pas de la matrice
{
  if(x<0)
  {
    x=0;
  };
  if(x>6)
  {
    x=6;
  };
   matrix.clear();
   carre(LED_YELLOW);
   refresh();
}


void deplacementverticalcarre()
{
  temps2=(int(millis()/1000)%8);
  if(temps2==0)
  {
    y=0;
  };
  if(temps2==1)
  {
    y=1;
  };
  if(temps2==2)
  {
    y=2;
  };
  if(temps2==3)
  {
    y=3;
  };
  if(temps2==4)
  {
    y=4;
  };
  if(temps2==5)
  {
    y=5;
  };
  if(temps2==6)
  {
    y=6;
    passage=1;
    pointeur++;
    tabx[pointeur]=x;
    taby[pointeur]=y;
    Serial.print(tabx[1]);
    Serial.print(" | ");
    Serial.print(taby[1]);
    Serial.print(" | ");
    Serial.print(pointeur);
    Serial.print(" | ");
  };
}

void lirebp()//fonction bouger horizontalement la pièce
{
 etatbpdroit=digitalRead(bpdroit);
 etatbpgauche=digitalRead(bpgauche);
  if(etatbpdroit==1)
   {
    do
     {
      etatbpdroit=digitalRead(bpdroit);     
      deplacementverticalcarre();
      verifdepacementcarre();
     }
    while(etatbpdroit==1);
    x--;
  };
 if(etatbpgauche==1)
   {
    do
     {
      etatbpgauche=digitalRead(bpgauche);
      deplacementverticalcarre();
      verifdepacementcarre();
     }
    while(etatbpgauche==1);
    x++;
  };
}

void refresh()
{
  for(int i=1; i<=pointeur; i++)
  {
    matrix.drawRect(taby[i],tabx[i],2,2,LED_GREEN);
    matrix.writeDisplay();
  }
}

void jeu()
{
  if(passage==0)
   {
    matrix.clear();
    carre(LED_YELLOW);
    refresh();
    lirebp();
    deplacementverticalcarre();
    verifdepacementcarre();
   }else if(passage==1)
   {
    
    matrix.clear();
    refresh();
    passage=0;
   }
}
// programme

void loop()
{
  jeu();
}
[\code]

Il y a une erreur dans l'initialisation de tes tableaux, il manque le =.
Sinon, y vaut la même chose que temps2 donc pas besoin de ta batterie de tests.
Enfin tu peux économiser les tests sur x avec constrain

Pour le reste, pas facile de t'aider car ton code manque de commentaires pour expliquer ce que font les fonctions et les divers blocs...