"Pelotita" pantalla TFT

Buenas noches a todos!

Tengo un problema básico con mi shield TFT. (Geek teches TFT LCD shield 2.0) + TFT 3.2 pulgadas ILI9341 + Mega 2560

La cuestión es que no consigo crear una animación clara de una “pelotita” sin que esta parpadee.
No utilizo el comando clrScr, ya que es muy lento…

Un ejemplo: Bucle que incrementa el valor “y” de la “pelotita” a velocidad constante.
Dibujo una esfera verde, luego otra negra encima de ella, y una nueva en la nueva posición “y”.

#include <memorysaver.h>
#include <UTFT.h> 
#include <URTouch.h>


UTFT myGLCD(ILI9341_16, 38, 39, 40, 41);
URTouch  myTouch(6, 5, 4, 3, 2);

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];


void setup() {
	myGLCD.InitLCD();
	myGLCD.clrScr();
	myTouch.InitTouch();
	myTouch.setPrecision(PREC_MEDIUM);
}

void loop() {
	myGLCD.setBackColor(0, 0, 0); 
	myGLCD.setColor(0, 255, 0);

	for (int y = 0; y <= 250; y+=4) {
		myGLCD.setColor(0, 255, 0);
		myGLCD.fillCircle(100, y, 20);
		myGLCD.setColor(0, 0, 0);
		myGLCD.fillCircle(100, y, 20);
	}

}

No consigo una animación clara. Siempre hay una atenuación de color y un rápido parpadeo.

¿Podríais ayudarme por favor a entender como controlar el dichoso efecto?

El objetivo es mostrar la posición de un joystick en un circulo con dicha “pelotita” en el centro y moviéndose con los valores x,y recibidos por puerto serie…

Mil gracias de antemano:

Sin haber visto nunca nada de esto, me atrevo ha decir que:

esto fuera del loop myGLCD.setBackColor(0, 0, 0); myGLCD.setColor(0, 255, 0);

Esto quizás en el setup antes del clr, pero al ser negro puede que por defecto ya sea así. myGLCD.setBackColor(0, 0, 0);

Y esto fuera myGLCD.setColor(0, 255, 0);

En todo caso en tu código, la pelota esta mas tiempo apagada que encendida, si borrases primero y pintases después estaría más tiempo encendida que apagada

No te pillo.
Todo ocurre dentro del For.
No entiendo por que dices que la pelotita está más tiempo encendida que apagada.

	for (int y = 0; y <= 250; y+=4) {
		myGLCD.setColor(0, 255, 0);
		myGLCD.fillCircle(100, y, 20);
		myGLCD.setColor(0, 0, 0);
		myGLCD.fillCircle(100, y, 20);
	}

Ni por que dices :

Y esto fuera
myGLCD.setColor(0, 255, 0);

Define el color verde de la pelotita.

	myGLCD.setBackColor(0, 0, 0); 
	/myGLCD.setColor(0, 255, 0);

Esto está en el loop pero pero fuera del for. solo relantiza al final del bucle for. No dentro de él.

Pero lo has probado ? yo no puedo probarlo, no tengo tu hardware, me he limitado ha sugerirte algo.

JaumeBonetM:
No te pillo.
Todo ocurre dentro del For.
No entiendo por que dices que la pelotita está más tiempo encendida que apagada.

	for (int y = 0; y <= 250; y+=4) {
	myGLCD.setColor(0, 255, 0);
	myGLCD.fillCircle(100, y, 20);
	myGLCD.setColor(0, 0, 0);
	myGLCD.fillCircle(100, y, 20);
}

Si te imaginas los ciclos de reloj que consume cada instrucción el “for (int y = 0; y <= 250; y+=4)” es el más costoso y en ese momento la pelotita está apagada.

JaumeBonetM:
Ni por que dices :

Y esto fuera
myGLCD.setColor(0, 255, 0);

Define el color verde de la pelotita.

porque ya lo dices cada vez que la pintas, entonces porque lo dices en el loop, aunque esté fuera del for

JaumeBonetM:

	myGLCD.setBackColor(0, 0, 0); 
/myGLCD.setColor(0, 255, 0);



Esto está en el loop pero pero fuera del for. solo relantiza al final del bucle for. No dentro de él.

Ya, y de que sirve ?

Sisi ya lo probé ayer y el resultado es exactamente el mismo. Pero muchas gracias por el interes!

Tenias razon! Ya me vale por no contar los ciclos del bucle for. Con un potencionetro y dibujando/borrando va realmente bien. Me he vuelto loco por no provar directamente con la señal del pot fffff Mil gracias de nuevo!!