Personaliser résolution ecran TFT

Bonjour,
J'ai un écran TFT ILI9488 (480 x 320) et une Arduino Méga, je voudrais réduire la résolution de l'écran comme je voudrais pour faire des graphismes pixelisés.
J'ai pensé faire une matrice pour cela, de taille correspondant en abscisse et ordonné à la résolution je souhaite, dessinant des carrés sur l'écran me servant de pixels.
Pensez vous qu'il est possible d'approcher ce problème d'une meilleure façon ?

Si les néo-pixels ont une taille variable entre 1x1 et NxN c'est en principe impossible à cause du 1x1. Pour mémoriser une matrice 480x320 en 16 bits de couleur, il faut 30ko, on n'a que 8ko sur une mega. Si on se contente du mode 8 couleurs, la taille de la matrice peut être divisée par 4, mais on ne peut plus alors stocker que la matrice. Pareil si les néo-pixels font 2x2 en mode 16 bits de couleurs.

Une solution est de redéfinir la fonction writePixel (voir le nom exact en fonction de la bibliothèque utilisée, fonction qui dessinerait un point à l'écran) pour faire quelque chose du style:

void neoWritePixel(int x, int y, word couleur)
{
  WriteBox(x * N, y * N, x * N+ N - 1, y * N+ N - 1, couleur);
}

Bien entendu, du coup, tu n'a plus accès qu'au dessin de points. Il faut réécire les autres fonctions (droites, cercles, images...)

Une solution finalement plus simple est de regarder dans le bibliothèque comment est implantée WritePixel et de la modifier comme ci dessus. Il y a des chances que les fonctions graphiques droite inclinées, cercle, images se servent de la base WritePixel. C'est mois sûr pour les droites verticales ou horizontal ou les boites pleines qui peuvent profiter des particularité des afficheurs.

Je crois qu'il te manque un zéro

 480*320*2= 307200
1 Like

Effectivement c'est encore pire. Pour voir une matrice, il faut des paquets de 80 pixels minimum....

Bonjour,
je voudrais creer une image pixelisé placé à un endroit (x,y) d'un ecran TFT.
Je ne sais pas comment creer de facon hexadecimal cette image (exemple un dessin de PacMan).
Je ne sais pas non plus comment placer cette image sur l'écran.
Mon objectif est de faire une image qui se déplace, vaut il mieux faire dessin de l'image, efface, ou bien effacer juste les pixel necessaires et dessiner ceux qui apparaissent ?
La seconde eventualité me parait plus compliqué.
Pouvez vous me donner les bases pour je puisse commencer mon projet, je dispose d'une arduino mega.

il faudrait aussi connaître le type de l'écran...

lire les recommandations listées dans "Les bonnes pratiques du Forum Francophone” pour savoir quelles infos sont nécessaire pour avoir des réponses pertinentes.

Je suppose que ce message est la suite de l'autre sur lequel tu questionnais sur la manière de dessiner des images pixelisées.

Alors j'ai 2 remarques:

  • un écran 480 x 320 est relativement difficile à gérer avec une Arduno Mega. Elle n'a pas beaucoup de RAM, cela fait beaucoup d'informations à transmettre à l'écran et les interfaces sont modérément performantes.
  • tu choisis un écran avec une résolution importante (au regard des capacités de traitement de la carte choisie) mais tu veux y mettre des images en basse résolution.

N'y aurait-il pas là une erreur de casting?

  • si tu tiens absolument à l'écran 480x320 peut-être vaudrait-il mieux partir sur une carte plus performante (Teensy, Raspberry Pi)
  • si tu es attaché à la basse résolution, pourquoi ne pas choisir un écran avec une résolution plus basse qui sera plus simple à gérer avec la Mega?

La video Baballe 3 0 0 - YouTube déplace une balle avec une uno. Je n'efface rien, la balle est constituée d'un disque plein entouré par deux ou trois cercles noirs. Si le fond est uni, ce n'est pas la peine d'effacer quoi que ce soit. Effacer et redessiner fait clignoter l'image qui se déplace.

La vidéo Decalage 3 0 0 - YouTube montre une image qui se déplace. Dans cet exemple, l'image est assez grande et le décalage est long.


Si l'image à déplacer est pixellisée, il faudra dessiner autant de points que si elle ne l'est pas. Pixelleiser ou pas ne change pas grand chose.


Perso, je dessine mon dessin sur un ordi j'en fais une image .bmp qui est reconnu par ma bibliothèque Dans la video MaisonVolets 3 0 0 - YouTube le mur provien de je ne sais ou, la porte d'un marchand de porte, les boutons sont des photos somfy...

Effectivement je veux pixeliser des images sous forme de carrés de couleur, et j'ai à ma disposition un écran 480x320, 4". Je n'ai pas besoin que les animations soient rapide, ni d'en gérer plusieurs à la fois, elle se font l'une après l'autre.
Le choix j'ai fais est d'une part vouloir vraiment programmer en arduino, pour l'écran il est vrai je n'ai peut-être pas fais le bon choix au niveau de la résolution, mais j'essaie de faire avec..
J'ai vraiment trouvé chouette la balle qui se déplace à l'écran, je reste très attaché à la pixellisation de l'image et non importé une image bmp.
Pour éclaircir cela prenons l'exemple d'une allumette qui brule, je prefere ne pas faire des bmp qui se superpose, mais effacer ou rajouter des "carre-pixels"
J'ai besoin de savoir comment faire cela de façon la mieux possible, peut-être une matrice (x,y,c) qui dessine les "carrés-pixel", en limitant x,y et le nombre de couleur.

J'ai fusionné les 2 discussions car c'est le même besoin.

vous utilisez quelle bibliothèque pour cet écran sur votre MEGA?

D'accord, vous avez eu raison.
j'utilise : 3.95inch Arduino Display-Mega2560 - LCD wiki
Là je remplace les mots utilisé par la librairie en mots choisi par moi avec la même fonctionnalité en faisant un fichier "x.cpp" et "x.h" associé au programme.

Pouvez vous m'expliquer ce que le choix de la bibliotheque influence la problématique que j'expose, elles semblent toutes avoir la procédure rectangle et les matrices sont du language arduino, ce n'est pas une difficulté de script mais de formalisation, sur laquelle je demande un base pour avancer, il y a une subtilité, sans douter de vos compétence qui m'échappe...

Pour ta procedure neoWritePixel, au lieu de prendre le point de réference en bas à gauche, ne serait ce pas preferable de prendre comme reference celui au centre du rectangle, et de faire modulo n pour la succession des pixel ? il suffirai juste d'une liste avec la valeur des couleurs ?
L'utilisation de modulo permettrai t il de ne pas utiliser de matrice ?
Comment t'y prendrai tu pour faire le deplacement de la balle en utilisant une image pixelisé carré 5x5 par exemple ? Sans pour autant le faire quel methode utiliserai tu ?

Il doit exister un moyen de franchir la limite des 8ko d'une carte arduino ?
Peut on faire 3 listes de variable x,y, et couleur que l'on met en correspondance ? cela permettrai peut etre d'utiliser moins de memoire ? x et y etant le centre des "pixelcarré". Si c'est possible comment les lier entre elle ces liste abscisse, ordonné et couleur au niveau du script.

C’était pour voir l’ensemble des API exposées, par exemple s’il y avait la notion de sprite ou de framebuffer accessible côté écran

Difficilement. Ce n’est pas une carte adaptée pour servir de GPU

Il existe aussi des écrans (bien plus chers) qui embarquent « de l’intelligence » et permettent une UI plus avancée (a base de FT801 par exemple)