Helloworld program for TFT320_QVT Touchscreen module
Dependencies: TFTLCD UTouch mbed
Fork of TFT_320QVT_Window_Drag_Demo by
main.cpp@2:2f4024b1aefd, 2016-01-11 (annotated)
- Committer:
- rpocc
- Date:
- Mon Jan 11 10:36:30 2016 +0000
- Revision:
- 2:2f4024b1aefd
- Parent:
- 0:dc51da7c52b1
First release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rpocc | 0:dc51da7c52b1 | 1 | /** \file main.cpp |
rpocc | 2:2f4024b1aefd | 2 | * \brief mbed Hello World demo for TFT-320QVT module with SSD1289 and XPT2046 touchscreen. |
rpocc | 0:dc51da7c52b1 | 3 | * |
rpocc | 0:dc51da7c52b1 | 4 | * \copyright GNU Public License, v2. or later |
rpocc | 0:dc51da7c52b1 | 5 | * Creates a window, which can be dragged within the screen, and can be closed |
rpocc | 0:dc51da7c52b1 | 6 | * with the standard WIndows-style "x"-button. |
rpocc | 0:dc51da7c52b1 | 7 | * Window appearance: initial position, size and colors can be changed via defines |
rpocc | 0:dc51da7c52b1 | 8 | * Window in this demo can not be moved beyond the screen area except of the right side. |
rpocc | 0:dc51da7c52b1 | 9 | * May require a touchscreen calibration procedure using UTouchCD.h |
rpocc | 0:dc51da7c52b1 | 10 | * |
rpocc | 0:dc51da7c52b1 | 11 | * Made by Dmitry Shtatnov, SSSR Labs |
rpocc | 0:dc51da7c52b1 | 12 | * http://modularsynth.ru/ |
rpocc | 0:dc51da7c52b1 | 13 | ***************************************************************************************/ |
rpocc | 0:dc51da7c52b1 | 14 | |
rpocc | 0:dc51da7c52b1 | 15 | #include "mbed.h" |
rpocc | 0:dc51da7c52b1 | 16 | #include "ssd1289.h" |
rpocc | 0:dc51da7c52b1 | 17 | #include "UTouch.h" |
rpocc | 0:dc51da7c52b1 | 18 | |
rpocc | 0:dc51da7c52b1 | 19 | #define C_WINDOW_BODY 0xCCCCCC |
rpocc | 0:dc51da7c52b1 | 20 | #define C_WINDOW_HIGHLIGHT 0xDDDDDD |
rpocc | 0:dc51da7c52b1 | 21 | #define C_WINDOW_SHADOW 0xBBBBBB |
rpocc | 0:dc51da7c52b1 | 22 | #define C_WINDOW_TITLE_BAR 0x0066DD |
rpocc | 2:2f4024b1aefd | 23 | #define C_DESKTOP_BG 0x000000 |
rpocc | 0:dc51da7c52b1 | 24 | |
rpocc | 0:dc51da7c52b1 | 25 | #define WINDOW_WIDTH 150 |
rpocc | 0:dc51da7c52b1 | 26 | #define WINDOW_HEIGHT 100 |
rpocc | 0:dc51da7c52b1 | 27 | |
rpocc | 0:dc51da7c52b1 | 28 | PortOut LCDPA(PortA,0xFF00); |
rpocc | 0:dc51da7c52b1 | 29 | PortOut LCDPC(PortC,0x00FF); |
rpocc | 0:dc51da7c52b1 | 30 | // CS, REST, RS, WR, DATA, BL, RD |
rpocc | 0:dc51da7c52b1 | 31 | SSD1289_LCD myGLCD(PB_3, PB_4, PB_0, PB_1, &LCDPA, &LCDPC, NC, PB_2); |
rpocc | 0:dc51da7c52b1 | 32 | |
rpocc | 0:dc51da7c52b1 | 33 | UTouch myTouch(PB_9, PB_8, PB_7, PB_6, PB_5); |
rpocc | 2:2f4024b1aefd | 34 | long x, y, oldx, oldy, wx, wy; |
rpocc | 0:dc51da7c52b1 | 35 | float p; |
rpocc | 0:dc51da7c52b1 | 36 | uint8_t av_cnt; |
rpocc | 0:dc51da7c52b1 | 37 | int16_t rx, ry, rz1, rz2, pressure; |
rpocc | 0:dc51da7c52b1 | 38 | char xc[10], yc[10], z1c[10], z2c[10], str[15]; |
rpocc | 0:dc51da7c52b1 | 39 | bool drag = false; |
rpocc | 2:2f4024b1aefd | 40 | bool loop = true; |
rpocc | 0:dc51da7c52b1 | 41 | |
rpocc | 0:dc51da7c52b1 | 42 | bool title(uint16_t xcur, uint16_t ycur, uint16_t xwin, uint16_t ywin) { |
rpocc | 0:dc51da7c52b1 | 43 | if((xcur>xwin+2)&&(xcur<xwin+WINDOW_WIDTH-18)&&(ycur>ywin+2)&&(ycur<ywin+22)) return true; |
rpocc | 0:dc51da7c52b1 | 44 | else return false; |
rpocc | 0:dc51da7c52b1 | 45 | } |
rpocc | 0:dc51da7c52b1 | 46 | |
rpocc | 0:dc51da7c52b1 | 47 | bool close(uint16_t xcur, uint16_t ycur, uint16_t xwin, uint16_t ywin) { |
rpocc | 0:dc51da7c52b1 | 48 | if((xcur>xwin+WINDOW_WIDTH-19)&&(xcur<xwin+WINDOW_WIDTH-1)&&(ycur>ywin+2)&&(ycur<ywin+21)) return true; |
rpocc | 0:dc51da7c52b1 | 49 | else return false; |
rpocc | 0:dc51da7c52b1 | 50 | } |
rpocc | 0:dc51da7c52b1 | 51 | |
rpocc | 0:dc51da7c52b1 | 52 | void drawBox(uint16_t xpos, uint16_t ypos, uint16_t xsize, uint16_t ysize) { |
rpocc | 0:dc51da7c52b1 | 53 | myGLCD.FillRect(xpos,ypos,xpos+xsize-1,ypos+ysize-1,C_WINDOW_BODY); |
rpocc | 0:dc51da7c52b1 | 54 | myGLCD.DrawHLine(xpos,ypos,xsize,C_WINDOW_HIGHLIGHT); |
rpocc | 0:dc51da7c52b1 | 55 | myGLCD.DrawHLine(xpos+1,ypos+ysize-1,xsize-1,C_WINDOW_SHADOW); |
rpocc | 0:dc51da7c52b1 | 56 | myGLCD.DrawVLine(xpos,ypos,ysize,C_WINDOW_HIGHLIGHT); |
rpocc | 0:dc51da7c52b1 | 57 | myGLCD.DrawVLine(xpos+xsize-1,ypos,ysize-1,C_WINDOW_SHADOW); |
rpocc | 0:dc51da7c52b1 | 58 | } |
rpocc | 0:dc51da7c52b1 | 59 | |
rpocc | 0:dc51da7c52b1 | 60 | void drawWindow(uint16_t xpos, uint16_t ypos, uint16_t xsize, uint16_t ysize) { |
rpocc | 0:dc51da7c52b1 | 61 | drawBox(xpos, ypos, xsize, ysize); |
rpocc | 0:dc51da7c52b1 | 62 | myGLCD.FillRect(xpos+2,ypos+2,xpos+xsize-3,ypos+21,C_WINDOW_TITLE_BAR); |
rpocc | 0:dc51da7c52b1 | 63 | drawBox(xpos+xsize-21,ypos+3,18,18); |
rpocc | 0:dc51da7c52b1 | 64 | myGLCD.DrawLine(xpos+xsize-18,ypos+6,xpos+xsize-7,ypos+17,COLOR_BLACK); |
rpocc | 0:dc51da7c52b1 | 65 | myGLCD.DrawLine(xpos+xsize-18,ypos+17,xpos+xsize-7,ypos+6,COLOR_BLACK); |
rpocc | 2:2f4024b1aefd | 66 | myGLCD.SetBackground(C_WINDOW_TITLE_BAR); |
rpocc | 2:2f4024b1aefd | 67 | myGLCD.SetForeground(COLOR_WHITE); |
rpocc | 2:2f4024b1aefd | 68 | myGLCD.Print("Hello World", xpos+6,ypos+6); |
rpocc | 0:dc51da7c52b1 | 69 | } |
rpocc | 0:dc51da7c52b1 | 70 | int main() { |
rpocc | 0:dc51da7c52b1 | 71 | myGLCD.Initialize(); |
rpocc | 0:dc51da7c52b1 | 72 | myGLCD.SetBackground(COLOR_WHITE); |
rpocc | 0:dc51da7c52b1 | 73 | myGLCD.SetForeground(COLOR_BLACK); |
rpocc | 2:2f4024b1aefd | 74 | myGLCD.FillScreen(C_DESKTOP_BG); |
rpocc | 0:dc51da7c52b1 | 75 | |
rpocc | 2:2f4024b1aefd | 76 | while(1==1) |
rpocc | 2:2f4024b1aefd | 77 | { |
rpocc | 2:2f4024b1aefd | 78 | wx = 85; |
rpocc | 2:2f4024b1aefd | 79 | wy = 70; |
rpocc | 2:2f4024b1aefd | 80 | loop = true; |
rpocc | 0:dc51da7c52b1 | 81 | myGLCD.SetFont(&TerminusFont); |
rpocc | 0:dc51da7c52b1 | 82 | myTouch.InitTouch(); |
rpocc | 0:dc51da7c52b1 | 83 | myTouch.SetPrecision(PREC_HI); |
rpocc | 2:2f4024b1aefd | 84 | drawWindow(wx,wy,WINDOW_WIDTH,WINDOW_HEIGHT); |
rpocc | 2:2f4024b1aefd | 85 | while(loop) |
rpocc | 2:2f4024b1aefd | 86 | { |
rpocc | 2:2f4024b1aefd | 87 | if (myTouch.DataAvailable() == true) |
rpocc | 0:dc51da7c52b1 | 88 | { |
rpocc | 0:dc51da7c52b1 | 89 | if(myTouch.Read()) { |
rpocc | 0:dc51da7c52b1 | 90 | x = myTouch.GetX(); |
rpocc | 0:dc51da7c52b1 | 91 | y = myTouch.GetY(); |
rpocc | 0:dc51da7c52b1 | 92 | if((oldx!=x)&&(oldy!=y)) { |
rpocc | 0:dc51da7c52b1 | 93 | if(drag) { |
rpocc | 2:2f4024b1aefd | 94 | myGLCD.FillRect(wx, wy, wx+WINDOW_WIDTH-1, wy+WINDOW_HEIGHT-1, C_DESKTOP_BG); |
rpocc | 0:dc51da7c52b1 | 95 | wx=wx+x-oldx; |
rpocc | 0:dc51da7c52b1 | 96 | wy=wy+y-oldy; |
rpocc | 0:dc51da7c52b1 | 97 | drawWindow(wx,wy,WINDOW_WIDTH,WINDOW_HEIGHT); |
rpocc | 0:dc51da7c52b1 | 98 | } |
rpocc | 0:dc51da7c52b1 | 99 | if(title(x, y, wx, wy)) { |
rpocc | 0:dc51da7c52b1 | 100 | drag = true; |
rpocc | 0:dc51da7c52b1 | 101 | } |
rpocc | 0:dc51da7c52b1 | 102 | if(close(x, y, wx, wy)) { |
rpocc | 2:2f4024b1aefd | 103 | myGLCD.FillRect(wx, wy, wx+WINDOW_WIDTH-1, wy+WINDOW_HEIGHT-1, C_DESKTOP_BG); |
rpocc | 2:2f4024b1aefd | 104 | loop = false; |
rpocc | 0:dc51da7c52b1 | 105 | } |
rpocc | 0:dc51da7c52b1 | 106 | oldx = x; |
rpocc | 0:dc51da7c52b1 | 107 | oldy = y; |
rpocc | 0:dc51da7c52b1 | 108 | } |
rpocc | 0:dc51da7c52b1 | 109 | } |
rpocc | 0:dc51da7c52b1 | 110 | } |
rpocc | 0:dc51da7c52b1 | 111 | else { |
rpocc | 0:dc51da7c52b1 | 112 | drag = false; |
rpocc | 0:dc51da7c52b1 | 113 | } |
rpocc | 0:dc51da7c52b1 | 114 | } |
rpocc | 0:dc51da7c52b1 | 115 | } |
rpocc | 2:2f4024b1aefd | 116 | } |