Bonjour à tous, je travaille présentement sur un jeu du serpent qui fonctionne sur 4 modules Max7219 de 8 x 8 leds donc qui forme un carré de 16 x 16 led, en ce moment le jeu du serpent fonctionne parfaitement en se promenant sur les 4 modules ce qui lui fait un espace jeu de 256 led.
Mon problème est avec le défilement des messages que je veux faire afficher avant et durant le jeu, pour le moment mon texte démarre sur la tuile supp. droite en inversé ainsi que sur la supp gauche de la même façon ensuite il démarre sur la tuile inférieure droite pour continuer en défilent vers la tuile inf. gauche, ce qui est parfait, mais j'aimerais que le texte défile de droite à gauche au centre du montage de module Max7219 en d'autres mots aux ligne 3 a 10 sur les lignes 0 a 15.
J'inclus le code complet en espérant pouvoir avoir une réponse.
Snake_V4.ino (31.6 KB)
Bonjour
J'ai fait aussi des jeux sur ce genre d'afficheur : 2 bandes de 4 matrices 8*8. Les codes sont ici. Il y a un casse briques, un snake et un jeu de "vaisseau spatial".
Pour ton problème, ton code est assez complexe et je pense qu'il ne faut pas bidouiller dedans. Il vaut mieux créer une fonction qui va faire le défilement. Pour cela, on va considérer l'afficheur comme une mémoire et décaler les colonnes une par une.
Par exemple pour décaler vers la gauche, on va prendre chaque colonne et la recopier sur sa voisine de gauche. Si ta numérotation est la suivante :
Tu peux écrire une fonction du genre :
for (int cumcol = 4; numcol<11; numcol++) {
lire valeur de la colonne numcol
écrire cette valeur dans la colonne numcol-1
}
Afficher la dernière colonne
Afficher les matrices
Le problème est que tu utilises la bibliothèque MaxMatrix et qu'elle semble ne pas disposer d'une foncton de lecture de la valeur d'une colonne.
La difficulté sera aussi de savoir quoi afficher dans la dernière colonne.
J'utilise MD_MAX72XX qui a une fonction getColumn ce qui simplifie beaucoup la tâche.
uint8_t getColumn(uint8_t c) { return getColumn((c / COL_SIZE), c % COL_SIZE); };
/**
* Get the status of a single LED, addressed as a pixel.
*
* The method will get the status of a specific LED element based on its
* coordinate position. The column number is dereferenced into the device
* and column within the device, allowing the LEDs to be treated as a
* continuous pixel field.
*
* \param r row coordinate for the point [0..ROW_SIZE-1].
* \param c column coordinate for the point [0..getColumnCount()-1].
* \return true if LED is on, false if off or parameter errors.
*/