Cara "animada" en display TFT 1.44

Buenas, esto es una cara (o algo asi..) dibujado en un display color TFT de 1.44, que mueve los ojos y la boca.

//conexiones del display al arduino UNO:
//LED a 3.3v del arduino, 
//SCK a pin 13, SDA a pin 11, A0 a pin 8,
//RESET a pin 9, CS a pin 10, 
//GND y VCC a gnd y 5v del arduino.

#include <TFT.h>  // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs   10
#define dc   9
#define rst  8

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800  
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0  
#define WHITE   0xFFFF

TFT TFTscreen = TFT(cs, rst, dc);

int x,y, rx,ry;

void setup() {
  
  Serial.begin(9600);
  randomSeed(analogRead(0));
  TFTscreen.begin();
    
  TFTscreen.background(0, 0, 0);
  TFTscreen.stroke(255,0,0);
  
  TFTscreen.line(40,65,55,118); //borde cara
  TFTscreen.line(41,65,56,118);
  TFTscreen.line(150,65,135,118); //borde cara
  TFTscreen.line(149,65,134,118);
  
  TFTscreen.line(40,60,43,9);
  TFTscreen.line(41,60,44,9);   //borde cara
  TFTscreen.line(150,60,147,9);
  TFTscreen.line(149,60,146,9);
  
 TFTscreen.fillRect(58,118,74,3,RED);
 TFTscreen.fillRect(70,121,50,4,RED); // barba
 TFTscreen.fillRect(80,125,30,4,RED); 
 
  for (x=40; x<152; x=x+10) { // cabello
  TFTscreen.fillCircle(x,2,6,RED);
    }

  y=33; //centro de los ojos  
  TFTscreen.stroke(255, 0, 0);
  TFTscreen.fillCircle(70,y,20,BLACK);TFTscreen.fillCircle(70,y,17,YELLOW); //ojos
  TFTscreen.fillCircle(120,y,20,BLACK);TFTscreen.fillCircle(120,y,17,YELLOW); 
  
  TFTscreen.fillCircle(95,63,7,MAGENTA); //nariz
  TFTscreen.fillCircle(95,68,9,MAGENTA);
  TFTscreen.fillCircle(95,78,12,MAGENTA);

}

void loop() {
  
 for (x=65; x<75; x=x+5) {
    rx=random(0, 40);
 TFTscreen.fillCircle(x,y,7,BLACK);  //pupilas hacia la derecha
 TFTscreen.fillCircle(x+50,y,7,BLACK);
    ry=random(0, 7); 
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,WHITE); //boca
 delay(rx*13);
 
 TFTscreen.fillCircle(x,y,7,WHITE);   //borra el ultimo mov. de las pupilas
 TFTscreen.fillCircle(x+50,y,7,WHITE);
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,BLACK); //borra el ultimo mov. de la boca
   }
 
 TFTscreen.fillCircle(x,y,7,BLACK);   //mantiene las pupilas visibles para luego mov hacia la izq.
 TFTscreen.fillCircle(x+50,y,7,BLACK);
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,WHITE); //mantiene la boca visible
 delay(ry*100);
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,BLACK); //se borra la boca
 
 for (x=75; x>65; x=x-5) { 
  rx=random(0, 40);
 TFTscreen.fillCircle(x,y,7,BLACK); //pupilas hacia la izq
 TFTscreen.fillCircle(x+50,y,7,BLACK); 
  ry=random(0, 7); 
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,WHITE); //boca
 delay(rx*13);
 TFTscreen.fillCircle(x,y,7,WHITE); //borra el ultimo mov. de las pupilas
 TFTscreen.fillCircle(x+50,y,7,WHITE);
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,BLACK); //borra el ultimo mov. de la boca
  }
 TFTscreen.fillCircle(x,y,7,BLACK); //mantiene las pupilas visibles para luego mov hacia la der.
 TFTscreen.fillCircle(x+50,y,7,BLACK);
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,WHITE); //mantiene la boca visible
  delay(ry*100);
 TFTscreen.fillRect(95-rx,97+ry,2*rx,2*ry,BLACK); //se borra la boca
}