Sample TFT to KL25Z program.
Dependencies: SPI_STMPE610 TFT_fonts UniGraphic mbed
Fork of TFT_test_frdm-kl25z by
main.cpp
- Committer:
- Sustainable
- Date:
- 2018-02-13
- Revision:
- 5:449dc35a29bd
- Parent:
- 3:34d8706e1614
File content as of revision 5:449dc35a29bd:
/******************************************************************* * TFT Sample program for STEM project * By Henry Foley, Feb 2017 * * Hardware: Freedom KL25Z uC development board with a TFT 2.8" * resistive touch display shield from Adafruit (1651). * */ #include "mbed.h" #include "ILI9341.h" #include "SPI_STMPE610.h" #include "Arial12x12.h" #include "Arial24x23.h" #include "Arial28x28.h" #include "Verdana22x21-16.h" #define PIN_XP PTB3 #define PIN_XM PTB1 #define PIN_YP PTB2 #define PIN_YM PTB0 #define PIN_MOSI PTD2 #define PIN_MISO PTD3 #define PIN_SCLK PTD1 #define PIN_CS_TFT PTD0 #define PIN_DC_TFT PTD5 #define PIN_BL_TFT PTC9 #define PIN_CS_SD PTA4 #define PIN_CS_TSC PTA13 #define PIN_RESET_TFT PTB10 DigitalOut backlight(PTA12) ; SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ; ILI9341 TFT(SPI_8, 10000000, PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ; void initTFT(void); void drawScreen(void); uint16_t map(uint16_t, uint16_t, uint16_t, uint16_t, uint16_t); void display_xy(void); int main() { static uint16_t x, y, z ; uint16_t temp_x; int touched = 0; initTFT() ; drawScreen(); while(true) { touched = TSC.getRAWPoint(&x, &y, &z); if(touched) // any touch { // scale the raw values to match the screen orentation and 320(x = horiz) 240(y = vert) size, 0,0 = upper left corner temp_x = x; x = map(y,180, 3800,0,320); y = map(temp_x,3800,280,0,240); if( (x > 0 && x < 320) && ( y > 0 && y < 240 )) // if valid values { drawScreen(); TFT.BusEnable(true) ; TFT.background(Blue); wait(0.2); TFT.foreground(White); TFT.locate(120, 160); TFT.printf("x%3d", x); TFT.locate(120, 190); TFT.printf("y%3d", y); TFT.BusEnable(false) ; wait(0.5); // to reduce mutiple hits from one touch } } } } // end of main() void initTFT(void) { //Configure the display driver TFT.BusEnable(true) ; TFT.set_orientation(1); backlight = 1 ; TFT.background(Blue); wait(0.2); TFT.foreground(White); wait(0.2); TFT.cls(); wait(0.2); TFT.set_font((unsigned char*) Arial28x28); wait(0.2); TFT.locate(15, 10); TFT.printf(" TFT Test "); TFT.locate(15, 100); TFT.BusEnable(false); wait(5); } void drawScreen(void) { TFT.BusEnable(true); TFT.foreground(White); // Set default text colors TFT.background(Blue); TFT.cls(); // wipe the screen clean and set bg colors wait(0.1); TFT.foreground(Black); TFT.set_font((unsigned char*) Arial24x23); TFT.fillcircle( 60, 175, 50, Yellow); TFT.background(Yellow) ; TFT.locate(25, 160); TFT.printf(" A "); TFT.fillcircle( 160, 105, 50, Cyan); TFT.background(Cyan) ; TFT.locate(127, 92); TFT.printf(" B "); TFT.fillcircle( 260, 175, 50, Green); TFT.background(Green) ; TFT.locate(222, 160); TFT.printf(" C "); TFT.fillcircle( 60, 60, 50, Orange); TFT.background(Orange) ; TFT.locate(15, 50); TFT.printf(" D "); TFT.fillcircle( 260, 60, 50, GreenYellow); TFT.background(GreenYellow) ; TFT.locate(225, 50); TFT.printf(" E "); TFT.BusEnable(false) ; } // mapping function to change the orentation of the screen to horizontal uint16_t map(uint16_t x, uint16_t in_min, uint16_t in_max, uint16_t out_min, uint16_t out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // Code used to debug screen orentation and touch pad void display_xy(void) { static uint16_t x, y, z ; uint16_t temp_x; int touched = 0; while(true) { touched = TSC.getRAWPoint(&x, &y, &z); x = x & 0x7f; y = y & 0x7f; if(x) { // any touch wait(0.5); TFT.BusEnable(true); TFT.locate(5, 40); TFT.printf("x= %5d x=%4X", x, x); TFT.locate(5, 80); TFT.printf("y= %5d y=%4X", y, y); // TFT.locate(5, 120); // TFT.printf("raw z%6d z%4X", z, z); // scale the raw values to match the screen orentation and 320(x = horiz) 240(y = vert) size // 0,0 = upper left corner temp_x = x; x = map(y,180, 3800,0,320); // TFT.set_orientation(1); y = map(temp_x,3800,280,0,240); // x = map(y,3800, 180,0,320); // TFT.set_orientation(3); // y = map(temp_x,280,3800,0,240); TFT.locate(5, 120); TFT.printf("map x%5d y%5d", x, y); TFT.BusEnable(false); wait(0.5); } } }