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
}