Improved the Arduino Robot Face by putting it on a 2.4 inch Parallel LCD. The LCD is a HY-TFT240 to be exact. This larger 320 by 240 LCD gives more room for adding a mouth as well as bigger eyes. However the LCD requires 8 data bits, 4 control lines power and ground. So there are more wires required. You can even get this type of LCD in a shield that plugs right into the Arduino. That arrangement will not fit in the robots head.
Here are two of the many possible faces.
This is the video of the robot faces.
This is the code. I do not have an interface to select what face to display yet.
// Parallel LCD to Robot Face
// By Bob Davis
// Adafruit_TFTLCD LIBRARY MUST BE CONFIGURED.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h.
// Some code by Open-Smart Team and Catalex Team
//
// Board: Arduino UNO R3 or Arduino Mega2560
// ADAFRUIT DRIVERS
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Actually use Arduino's reset pin
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//*********************************************//
// Pin assignments for the LCD *ADAFRUIT*
// GND -- GND
// 3V3 -- 3.3V
// CS -- A3
// RS -- A2
// WR -- A1
// RD -- A0
// RST -- RESET or resistor to +V
// LED -- GND
// DB0-DB7 -- 8, 9, 2, 3, 4, 5, 6, 7
int width=320; // scales
int height=240;
// uint16_t g_identifier;
// Assign names to color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
void setup(void) {
uint16_t identifier = 0x9325; // or 9341
// tft.reset();
tft.begin(identifier);
tft.setRotation(1);
// tft.setCursor(0, 0);
tft.fillRect(0, 0, width, height, BLACK);
}
void loop(void) {
tft.fillRect(0, 0, width, height, BLACK);
// Eyes Center
tft.fillCircle(width*.1,height*.2,20,WHITE);
tft.fillCircle(width*.1+40,height*.2,20,WHITE); // oblong fillCircle
tft.fillRect (width*.1,height*.2-20,40,41,WHITE);
tft.fillCircle(width*.1+20,height*.2,20, BLUE);
tft.fillCircle(width*.1+20,height*.2,10, BLACK);
tft.fillCircle(width*.8,height*.2,20,WHITE);
tft.fillCircle(width*.8+40,height*.2,20,WHITE); // oblong fillCircle
tft.fillRect (width*.8,height*.2-20,40,41,WHITE);
tft.fillCircle(width*.8+20,height*.2,20, BLUE);
tft.fillCircle(width*.8+20,height*.2,10, BLACK);
// Mouth
tft.fillCircle(width*.2,height*.8,20,WHITE);
tft.fillCircle(width*.8,height*.8,20,WHITE); // oblong fillCircle
tft.fillRect(width*.2,height*.8-20,width*.6,41,WHITE);
delay(1000);
// Eyes Narrow
tft.fillRect(0,height*.2-20,width,10,BLACK);
tft.fillRect(0,height*.2+10,width,11,BLACK);
delay(1000);
// Eyes Big
tft.fillCircle(width*.1,height*.2,30,WHITE);
tft.fillCircle(width*.1+40,height*.2,30,WHITE); // oblong fillCircle
tft.fillRect (width*.1,height*.2-30,45,61,WHITE);
tft.fillCircle(width*.1+20,height*.2,20,BLUE);
tft.fillCircle(width*.1+20,height*.2,10,BLACK);
tft.fillCircle(width*.78,height*.2,30,WHITE);
tft.fillCircle(width*.78+40,height*.2,30,WHITE); // oblong fillCircle
tft.fillRect (width*.78,height*.2-30,45,61,WHITE);
tft.fillCircle(width*.78+20,height*.2,20,BLUE);
tft.fillCircle(width*.78+20,height*.2,10,BLACK);
// Big Mouth
tft.fillCircle(width*.2,height*.8,30,WHITE);
tft.fillCircle(width*.8,height*.8,30,WHITE); // oblong fillCircle
tft.fillRect(width*.2,height*.8-30,width*.6,61,WHITE);
tft.fillCircle(width*.2,height*.8,20,BLACK);
tft.fillCircle(width*.8,height*.8,20,BLACK); // oblong fillCircle
tft.fillRect(width*.2,height*.8-20,width*.6,41,BLACK);
delay(1000);
tft.fillRect(0,0,width,height,BLACK); // Erase
// Eyes Right
tft.fillCircle(width*.1,height*.2,20,WHITE);
tft.fillCircle(width*.1+40,height*.2,20,WHITE); // oblong fillCircle
tft.fillRect (width*.1,height*.2-20,40,41,WHITE);
tft.fillCircle(width*.1+35,height*.2,20, BLUE);
tft.fillCircle(width*.1+35,height*.2,10, BLACK);
tft.fillCircle(width*.8,height*.2,20,WHITE);
tft.fillCircle(width*.8+40,height*.2,20,WHITE); // oblong fillCircle
tft.fillRect (width*.8,height*.2-20,40,41,WHITE);
tft.fillCircle(width*.8+35,height*.2,20, BLUE);
tft.fillCircle(width*.8+35,height*.2,10, BLACK);
// Narrow Mouth
tft.fillCircle(width*.2,height*.8,10,WHITE);
tft.fillCircle(width*.8,height*.8,10,WHITE); // oblong fillCircle
tft.fillRect(width*.2,height*.8-10,width*.6,21,WHITE);
delay(1000);
// Eyes Left
tft.fillCircle(width*.1,height*.2,20,WHITE);
tft.fillCircle(width*.1+40,height*.2,20,WHITE); // oblong fillCircle
tft.fillRect (width*.1,height*.2-20,40,41,WHITE);
tft.fillCircle(width*.1+5,height*.2,20, BLUE);
tft.fillCircle(width*.1+5,height*.2,10, BLACK);
tft.fillCircle(width*.8,height*.2,20,WHITE);
tft.fillCircle(width*.8+40,height*.2,20,WHITE); // oblong fillCircle
tft.fillRect (width*.8,height*.2-20,40,41,WHITE);
tft.fillCircle(width*.8+5,height*.2,20, BLUE);
tft.fillCircle(width*.8+5,height*.2,10, BLACK);
// Mouth
tft.fillCircle(width*.2,height*.8,10,WHITE);
tft.fillCircle(width*.8,height*.8,10,WHITE); // oblong fillCircle
tft.fillRect(width*.2,height*.8-10,width*.6,21,WHITE);
delay(1000);
}
No comments:
Post a Comment