Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
- // CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
- // SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
- //Technical support:goodtft@163.com
- #include <Adafruit_GFX.h> // Core graphics library
- #include <Adafruit_TFTLCD.h> // Hardware-specific library
- #include <TouchScreen.h>
- // The control pins for the LCD can be assigned to any digital or
- // analog pins...but we'll use the analog pins as this allows us to
- // double up the pins with the touch screen (see the TFT paint example).
- #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 // Can alternately just connect to Arduino's reset pin
- // When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
- // For the Arduino Uno, Duemilanove, Diecimila, etc.:
- // D0 connects to digital pin 8 (Notice these are
- // D1 connects to digital pin 9 NOT in order!)
- // D2 connects to digital pin 2
- // D3 connects to digital pin 3
- // D4 connects to digital pin 4
- // D5 connects to digital pin 5
- // D6 connects to digital pin 6
- // D7 connects to digital pin 7
- // For the Arduino Mega, use digital pins 22 through 29
- // (on the 2-row header at the end of the board).
- // Assign human-readable names to some common 16-bit 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
- // Color definitions
- #define ILI9341_BLACK 0x0000 /* 0, 0, 0 */
- #define ILI9341_NAVY 0x000F /* 0, 0, 128 */
- #define ILI9341_DARKGREEN 0x03E0 /* 0, 128, 0 */
- #define ILI9341_DARKCYAN 0x03EF /* 0, 128, 128 */
- #define ILI9341_MAROON 0x7800 /* 128, 0, 0 */
- #define ILI9341_PURPLE 0x780F /* 128, 0, 128 */
- #define ILI9341_OLIVE 0x7BE0 /* 128, 128, 0 */
- #define ILI9341_LIGHTGREY 0xC618 /* 192, 192, 192 */
- #define ILI9341_DARKGREY 0x7BEF /* 128, 128, 128 */
- #define ILI9341_BLUE 0x001F /* 0, 0, 255 */
- #define ILI9341_GREEN 0x07E0 /* 0, 255, 0 */
- #define ILI9341_CYAN 0x07FF /* 0, 255, 255 */
- #define ILI9341_RED 0xF800 /* 255, 0, 0 */
- #define ILI9341_MAGENTA 0xF81F /* 255, 0, 255 */
- #define ILI9341_YELLOW 0xFFE0 /* 255, 255, 0 */
- #define ILI9341_WHITE 0xFFFF /* 255, 255, 255 */
- #define ILI9341_ORANGE 0xFD20 /* 255, 165, 0 */
- #define ILI9341_GREENYELLOW 0xAFE5 /* 173, 255, 47 */
- #define ILI9341_PINK 0xF81F
- /******************* UI details */
- #define BUTTON_X 80
- #define BUTTON_Y 40
- #define BUTTON_W 150
- #define BUTTON_H 55
- #define BUTTON_SPACING_X 10
- #define BUTTON_SPACING_Y 25
- #define BUTTON_TEXTSIZE 2
- #define BUTTON_TEXT_LEN 15
- #define YP A2 // must be an analog pin, use "An" notation!
- #define XM A3 // must be an analog pin, use "An" notation!
- #define YM 8 // can be a digital pin
- #define XP 9 // can be a digital pin
- #define TS_MINY 100
- #define TS_MAXY 900
- #define TS_MINX 68
- #define TS_MAXX 945
- Adafruit_GFX_Button buttons[12];
- /* create 12 buttons, in classic candybar phone style */
- char buttonlabels[12][12] = {
- "Lagoon","Touchdown","Hurricane",
- "M.Sunrise", "Zombie", "Baha.Mama",
- "Pla.Punch", "S.o.Beach", "Paradise",
- "Cocoskiss","BlueNight","Gin 2cl"};
- uint16_t buttoncolors[12] = {
- ILI9341_BLACK, ILI9341_BLACK, ILI9341_BLACK,
- ILI9341_BLACK, ILI9341_BLACK, ILI9341_BLACK,
- ILI9341_BLACK, ILI9341_BLACK, ILI9341_BLACK,
- ILI9341_BLACK, ILI9341_BLACK, ILI9341_BLACK};
- #include <MCUFRIEND_kbv.h>
- MCUFRIEND_kbv tft;
- TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
- // If using the shield, all control and data lines are fixed, and
- // a simpler declaration can optionally be used:
- // Adafruit_TFTLCD tft;
- void setup(void) {
- Serial.begin(9600);
- Serial.println(F("TFT LCD test"));
- tft.reset();
- uint16_t identifier = tft.readID();
- if(identifier == 0x9325) {
- Serial.println(F("Found ILI9325 LCD driver"));
- } else if(identifier == 0x9328) {
- Serial.println(F("Found ILI9328 LCD driver"));
- } else if(identifier == 0x4535) {
- Serial.println(F("Found LGDP4535 LCD driver"));
- }else if(identifier == 0x7575) {
- Serial.println(F("Found HX8347G LCD driver"));
- } else if(identifier == 0x9341) {
- Serial.println(F("Found ILI9341 LCD driver"));
- }else if(identifier == 0x7783) {
- Serial.println(F("Found ST7781 LCD driver"));
- }else if(identifier == 0x8230) {
- Serial.println(F("Found UC8230 LCD driver"));
- }
- else if(identifier == 0x8357) {
- Serial.println(F("Found HX8357D LCD driver"));
- } else if(identifier==0x0101)
- {
- identifier=0x9341;
- Serial.println(F("Found 0x9341 LCD driver"));
- }else if(identifier==0x9481)
- {
- Serial.println(F("Found 0x9481 LCD driver"));
- }
- else if(identifier==0x9486)
- {
- Serial.println(F("Found 0x9486 LCD driver"));
- }
- else {
- Serial.print(F("Unknown LCD driver chip: "));
- Serial.println(identifier, HEX);
- Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
- Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
- Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
- Serial.println(F("If using the breakout board, it should NOT be #defined!"));
- Serial.println(F("Also if using the breakout, double-check that all wiring"));
- Serial.println(F("matches the tutorial."));
- identifier=0x9486;
- }
- tft.begin(identifier);
- Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height());
- tft.setRotation(1);
- tft.fillScreen(BLACK);
- // create buttons
- for (uint16_t row=0; row<4; row++) {
- for (uint16_t col=0; col<3; col++) {
- buttons[col + row*3].initButton(&tft,BUTTON_X+col (BUTTON_W+BUTTON_SPACING_X),
- BUTTON_Y+row*(BUTTON_H+BUTTON_SPACING_Y), // x, y, w,h, outline, fill, text
- BUTTON_W, BUTTON_H, ILI9341_GREENYELLOW, buttoncolors[col +row*3], ILI9341_WHITE,
- buttonlabels[col + row*3], BUTTON_TEXTSIZE);
- buttons[col + row*3].drawButton();
- }
- }
- }
- #define MINPRESSURE 10
- #define MAXPRESSURE 1000
- void loop(void) {
- /*TSPoint p;
- p = ts.getPoint();
- */
- digitalWrite(13, HIGH);
- TSPoint p = ts.getPoint();
- digitalWrite(13, LOW);
- // if sharing pins, you'll need to fix the directions of the touchscreen pins
- //pinMode(XP, OUTPUT);
- pinMode(XM, OUTPUT);
- pinMode(YP, OUTPUT);
- //pinMode(YM, OUTPUT);
- // we have some minimum pressure we consider 'valid'
- // pressure of 0 means no pressing!
- // p = ts.getPoint();
- /*
- if (ts.bufferSize()) {
- } else {
- // this is our way of tracking touch 'release'!
- p.x = p.y = p.z = -1;
- }*/
- // Scale from ~0->4000 to tft.width using the calibration #'s
- /*
- if (p.z != -1) {
- p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
- p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());
- Serial.print("("); Serial.print(p.x); Serial.print(", ");
- Serial.print(p.y); Serial.print(", ");
- Serial.print(p.z); Serial.println(") ");
- }*/
- if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
- {
- p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
- p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());
- Serial.print("("); Serial.print(p.x); Serial.print(", ");
- Serial.print(p.y); Serial.print(", ");
- Serial.print(p.z); Serial.println(") ");
- }
- // go thru all the buttons, checking if they were pressed
- for (uint8_t b=0; b<12; b++) {
- if ((buttons[b].contains(p.x, p.y)))
- {
- Serial.print("Pressing: "); Serial.println(b);
- buttons[b].press(true); // tell the button it is pressed
- } else {
- buttons[b].press(false); // tell the button it is NOT pressed
- }
- }
- // now we can ask the buttons if their state has changed
- for (uint8_t b=0; b<12; b++) {
- if (buttons[b].justReleased()) {
- Serial.print("Released: "); Serial.println(b);
- buttons[b].drawButton(); // draw normal
- }
- if (buttons[b].justPressed()) {
- buttons[b].drawButton(true); // draw invert!
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement