This is a fork of a functional ILI9341 display with a functional Seeed touch screen library.

Dependencies:   BMP180 UniGraphic mbed BNO055_fusionI_fixed HTU21D GPSISR Compass Fonts uGUI

Fork of TFT_test_NUCLEO-F411RE by Motoo Tanaka

/media/uploads/trevieze/win_20170427_21_31_20_pro.jpg

Had to move sensors to a remote board because of interference. Added spi burst mode to supported displays.

To do.... ugui buttons are slow. will need to add rtos to project. Finish other way points screen. Will have to rewrite portions of the touch screen class. Sense touch, delay, read values and then average, touch released, is the sequence. Add cadence input and logic to program for computer screen.

Committer:
trevieze
Date:
Sat Dec 17 19:07:26 2016 +0000
Revision:
3:6f47fcd415ab
Parent:
2:c5085faf2aa5
Child:
4:25554dc066a0
After program rename.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:cd5e3d371b54 1 /* mbed main.cpp to test adafruit 2.8" TFT LCD shiled w Touchscreen
Rhyme 0:cd5e3d371b54 2 * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
Rhyme 0:cd5e3d371b54 3 *
Rhyme 0:cd5e3d371b54 4 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Rhyme 0:cd5e3d371b54 5 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Rhyme 0:cd5e3d371b54 6 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Rhyme 0:cd5e3d371b54 7 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Rhyme 0:cd5e3d371b54 8 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 0:cd5e3d371b54 9 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Rhyme 0:cd5e3d371b54 10 * THE SOFTWARE.
Rhyme 0:cd5e3d371b54 11 */
Rhyme 0:cd5e3d371b54 12
Rhyme 0:cd5e3d371b54 13 /*
Rhyme 0:cd5e3d371b54 14 * Note: This program is derived from the SeeeStudioTFTv2 program.
Rhyme 0:cd5e3d371b54 15 * Although both program share same ILI9341 TFT driver,
Rhyme 0:cd5e3d371b54 16 * the touch sensor was not same with the Display I purchased from Akizuki.
Rhyme 0:cd5e3d371b54 17 * http://akizukidenshi.com/catalog/g/gM-07747/
Rhyme 0:cd5e3d371b54 18 * The touch sensor on the display is STMPE610,
Rhyme 0:cd5e3d371b54 19 * so I hacked the minimum spi driver for it (polling mode only).
Rhyme 0:cd5e3d371b54 20 */
Rhyme 0:cd5e3d371b54 21
Rhyme 0:cd5e3d371b54 22 #include "mbed.h"
Rhyme 0:cd5e3d371b54 23 #include <math.h>
Rhyme 0:cd5e3d371b54 24 #include "ILI9341.h"
trevieze 2:c5085faf2aa5 25 #include "SeeedStudioTFTv2.h"
trevieze 2:c5085faf2aa5 26 //#include "SPI_STMPE610.h"
Rhyme 0:cd5e3d371b54 27 #include "Arial12x12.h"
Rhyme 0:cd5e3d371b54 28 #include "Arial24x23.h"
Rhyme 0:cd5e3d371b54 29 #include "Arial28x28.h"
Rhyme 0:cd5e3d371b54 30 #include "Arial43x48_numb.h"
Rhyme 0:cd5e3d371b54 31
trevieze 1:e265e7245ab8 32 /*
Rhyme 0:cd5e3d371b54 33 #define PIN_MOSI PA_7
Rhyme 0:cd5e3d371b54 34 #define PIN_MISO PA_6
Rhyme 0:cd5e3d371b54 35 #define PIN_SCLK PA_5
Rhyme 0:cd5e3d371b54 36 #define PIN_CS_TFT PB_6
Rhyme 0:cd5e3d371b54 37 #define PIN_DC_TFT PC_7
Rhyme 0:cd5e3d371b54 38 #define PIN_BL_TFT PA_8
Rhyme 0:cd5e3d371b54 39 #define PIN_CS_SD PB_5
trevieze 1:e265e7245ab8 40 */
Rhyme 0:cd5e3d371b54 41 #define PIN_CS_TSC PA_9
Rhyme 0:cd5e3d371b54 42 #define PIN_TSC_INTR PA_8
Rhyme 0:cd5e3d371b54 43 #define PIN_RESET_TFT PC_13 /* place holder */
trevieze 1:e265e7245ab8 44
trevieze 1:e265e7245ab8 45 #define PIN_XP A3
trevieze 1:e265e7245ab8 46 #define PIN_XM A1
trevieze 1:e265e7245ab8 47 #define PIN_YP A2
trevieze 1:e265e7245ab8 48 #define PIN_YM A0
trevieze 1:e265e7245ab8 49 #define PIN_MOSI D11
trevieze 1:e265e7245ab8 50 #define PIN_MISO D12
trevieze 1:e265e7245ab8 51 #define PIN_SCLK D13
trevieze 1:e265e7245ab8 52 #define PIN_CS_TFT D5
trevieze 1:e265e7245ab8 53 #define PIN_DC_TFT D6
trevieze 1:e265e7245ab8 54 #define PIN_BL_TFT D7
trevieze 1:e265e7245ab8 55 #define PIN_CS_SD D4
trevieze 1:e265e7245ab8 56
Rhyme 0:cd5e3d371b54 57 #define DEVICE_NAME "F411RE"
Rhyme 0:cd5e3d371b54 58
Rhyme 0:cd5e3d371b54 59 #ifndef TARGET_NECLEO_F411RE
Rhyme 0:cd5e3d371b54 60 #define TARGET_NECLEO_F411RE
Rhyme 0:cd5e3d371b54 61 #endif
Rhyme 0:cd5e3d371b54 62
Rhyme 0:cd5e3d371b54 63
Rhyme 0:cd5e3d371b54 64 DigitalOut backlight(PB_3) ;
Rhyme 0:cd5e3d371b54 65 DigitalOut tsc_cs(PA_9, 1) ;
Rhyme 0:cd5e3d371b54 66 DigitalOut tft_cs(PB_6, 1) ;
Rhyme 0:cd5e3d371b54 67
Rhyme 0:cd5e3d371b54 68 ILI9341 TFT(SPI_8, 10000000,
Rhyme 0:cd5e3d371b54 69 PIN_MOSI, PIN_MISO, PIN_SCLK,
Rhyme 0:cd5e3d371b54 70 PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
trevieze 2:c5085faf2aa5 71 //SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
trevieze 2:c5085faf2aa5 72 TouchScreen TSC(PIN_XP, PIN_XM, PIN_YP, PIN_YM);
Rhyme 0:cd5e3d371b54 73
Rhyme 0:cd5e3d371b54 74 int page = 0 ;
Rhyme 0:cd5e3d371b54 75 int numPage = 2 ;
Rhyme 0:cd5e3d371b54 76
Rhyme 0:cd5e3d371b54 77 void initTFT(void)
Rhyme 0:cd5e3d371b54 78 {
Rhyme 0:cd5e3d371b54 79 //Configure the display driver
Rhyme 0:cd5e3d371b54 80 TFT.BusEnable(true) ;
Rhyme 0:cd5e3d371b54 81 TFT.FastWindow(true) ;
Rhyme 0:cd5e3d371b54 82 TFT.background(Black);
Rhyme 0:cd5e3d371b54 83 TFT.foreground(White);
Rhyme 0:cd5e3d371b54 84 wait(0.01) ;
Rhyme 0:cd5e3d371b54 85 TFT.cls();
Rhyme 0:cd5e3d371b54 86 TFT.BusEnable(false) ;
Rhyme 0:cd5e3d371b54 87 }
Rhyme 0:cd5e3d371b54 88
Rhyme 0:cd5e3d371b54 89 void screen1(void) // Welcome Screen
Rhyme 0:cd5e3d371b54 90 {
Rhyme 0:cd5e3d371b54 91 TFT.BusEnable(true) ;
Rhyme 0:cd5e3d371b54 92 backlight = 0 ;
Rhyme 0:cd5e3d371b54 93 TFT.background(White) ;
Rhyme 0:cd5e3d371b54 94 wait(0.1) ;
Rhyme 0:cd5e3d371b54 95 TFT.cls() ;
Rhyme 0:cd5e3d371b54 96 wait(0.1) ;
Rhyme 0:cd5e3d371b54 97
Rhyme 0:cd5e3d371b54 98 TFT.set_font((unsigned char*) Arial24x23);
Rhyme 0:cd5e3d371b54 99 TFT.foreground(Red) ;
Rhyme 0:cd5e3d371b54 100 TFT.locate(80, 40) ;
Rhyme 0:cd5e3d371b54 101 TFT.printf("MBED") ;
Rhyme 0:cd5e3d371b54 102 TFT.foreground(Blue);
Rhyme 0:cd5e3d371b54 103 TFT.locate(60, 80) ;
Rhyme 0:cd5e3d371b54 104 TFT.printf("2.8\"TFT") ;
Rhyme 0:cd5e3d371b54 105 TFT.locate(40, 120) ;
Rhyme 0:cd5e3d371b54 106 TFT.printf("with touch") ;
Rhyme 0:cd5e3d371b54 107 TFT.foreground(Black);
Rhyme 0:cd5e3d371b54 108 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:cd5e3d371b54 109 TFT.foreground(Blue) ;
Rhyme 0:cd5e3d371b54 110 TFT.locate(30, 180) ;
Rhyme 0:cd5e3d371b54 111 TFT.printf("This program is running on") ;
Rhyme 0:cd5e3d371b54 112 TFT.locate(30, 200) ;
Rhyme 0:cd5e3d371b54 113 TFT.printf("ST Nucleo F411RE with") ;
Rhyme 0:cd5e3d371b54 114 TFT.locate(30, 220) ;
Rhyme 0:cd5e3d371b54 115 TFT.printf("a program developed in mbed") ;
Rhyme 0:cd5e3d371b54 116 TFT.foreground(Green) ;
Rhyme 0:cd5e3d371b54 117 TFT.locate(30, 260) ;
Rhyme 0:cd5e3d371b54 118 TFT.printf("To advance demo page, touch") ;
Rhyme 0:cd5e3d371b54 119 TFT.locate(30, 280) ;
Rhyme 0:cd5e3d371b54 120 TFT.printf("and hold right side of screen") ;
Rhyme 0:cd5e3d371b54 121 TFT.locate(30, 300) ;
Rhyme 0:cd5e3d371b54 122 TFT.printf("until the next screen starts") ;
Rhyme 0:cd5e3d371b54 123 TFT.BusEnable(false) ;
Rhyme 0:cd5e3d371b54 124 backlight = 1 ;
Rhyme 0:cd5e3d371b54 125 }
Rhyme 0:cd5e3d371b54 126
Rhyme 0:cd5e3d371b54 127 void screen2(void) // Graphics
Rhyme 0:cd5e3d371b54 128 {
Rhyme 0:cd5e3d371b54 129 //Draw some graphics
Rhyme 0:cd5e3d371b54 130 int i, x[2], y[2] ;
Rhyme 0:cd5e3d371b54 131 backlight = 0 ;
Rhyme 0:cd5e3d371b54 132 TFT.BusEnable(true) ;
Rhyme 0:cd5e3d371b54 133 TFT.background(Black);
Rhyme 0:cd5e3d371b54 134 wait(0.1) ;
Rhyme 0:cd5e3d371b54 135 TFT.foreground(White);
Rhyme 0:cd5e3d371b54 136 wait(0.1) ;
Rhyme 0:cd5e3d371b54 137 TFT.cls() ;
Rhyme 0:cd5e3d371b54 138 wait(0.1) ;
Rhyme 0:cd5e3d371b54 139 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:cd5e3d371b54 140 TFT.locate(90,0);
Rhyme 0:cd5e3d371b54 141 TFT.printf("Graphics");
Rhyme 0:cd5e3d371b54 142
Rhyme 0:cd5e3d371b54 143 x[0] = 25 ; x[1] = 224 ;
Rhyme 0:cd5e3d371b54 144 y[0] = 20 ; y[1] = 219 ;
Rhyme 0:cd5e3d371b54 145 for (i = 20 ; i < 220 ; i += 10) {
Rhyme 0:cd5e3d371b54 146 TFT.line(i+5, y[0], i+5, y[1], Blue) ;
Rhyme 0:cd5e3d371b54 147 TFT.line(x[0], i, x[1], i, Blue) ;
Rhyme 0:cd5e3d371b54 148 }
Rhyme 0:cd5e3d371b54 149 TFT.line(125, y[0], 125, y[1], Green) ;
Rhyme 0:cd5e3d371b54 150 TFT.line(x[0], 120, x[1], 120, Green) ;
Rhyme 0:cd5e3d371b54 151 TFT.rect(x[0],y[0], x[1], y[1], Green) ;
Rhyme 0:cd5e3d371b54 152 TFT.locate(10, 20) ;
Rhyme 0:cd5e3d371b54 153 TFT.printf("V") ;
Rhyme 0:cd5e3d371b54 154 TFT.locate(0, 115) ;
Rhyme 0:cd5e3d371b54 155 TFT.printf("0.0") ;
Rhyme 0:cd5e3d371b54 156 TFT.locate(115, 225) ;
Rhyme 0:cd5e3d371b54 157 TFT.printf("0.0") ;
Rhyme 0:cd5e3d371b54 158 TFT.locate(215, 225) ;
Rhyme 0:cd5e3d371b54 159 TFT.printf("T") ;
Rhyme 0:cd5e3d371b54 160
Rhyme 0:cd5e3d371b54 161 double s;
Rhyme 0:cd5e3d371b54 162 for (int i = x[0]; i < 225; i++) {
Rhyme 0:cd5e3d371b54 163 s = 40 * sin((long double)i / 20);
Rhyme 0:cd5e3d371b54 164 TFT.pixel(i, 120 + (int)s, White);
Rhyme 0:cd5e3d371b54 165 }
Rhyme 0:cd5e3d371b54 166
Rhyme 0:cd5e3d371b54 167 TFT.fillrect(10, 240, 229, 309, White) ;
Rhyme 0:cd5e3d371b54 168 TFT.rect(10, 240, 229, 309, Red) ;
Rhyme 0:cd5e3d371b54 169 TFT.rect(11, 241, 228, 308, Red) ;
Rhyme 0:cd5e3d371b54 170
Rhyme 0:cd5e3d371b54 171 TFT.background(White) ;
Rhyme 0:cd5e3d371b54 172 TFT.foreground(Black) ;
Rhyme 0:cd5e3d371b54 173 TFT.locate(20, 250) ;
Rhyme 0:cd5e3d371b54 174 TFT.printf("With QVGA resolution") ;
Rhyme 0:cd5e3d371b54 175 TFT.locate(20, 270) ;
Rhyme 0:cd5e3d371b54 176 TFT.printf("simple graphics drawing") ;
Rhyme 0:cd5e3d371b54 177 TFT.locate(20, 290) ;
Rhyme 0:cd5e3d371b54 178 TFT.printf("capability is provided") ;
Rhyme 0:cd5e3d371b54 179 TFT.BusEnable(false) ;
Rhyme 0:cd5e3d371b54 180 backlight = 1 ;
Rhyme 0:cd5e3d371b54 181 }
Rhyme 0:cd5e3d371b54 182
Rhyme 0:cd5e3d371b54 183 double clip(double src)
Rhyme 0:cd5e3d371b54 184 {
Rhyme 0:cd5e3d371b54 185 double value ;
Rhyme 0:cd5e3d371b54 186 value = src ;
Rhyme 0:cd5e3d371b54 187 if (value < 0.0) {
Rhyme 0:cd5e3d371b54 188 value = 0.0 ;
Rhyme 0:cd5e3d371b54 189 } else if (value > 2.0) {
Rhyme 0:cd5e3d371b54 190 value = 2.0 ;
Rhyme 0:cd5e3d371b54 191 }
Rhyme 0:cd5e3d371b54 192 return( value ) ;
Rhyme 0:cd5e3d371b54 193 }
Rhyme 0:cd5e3d371b54 194
Rhyme 0:cd5e3d371b54 195 void incPage(void)
Rhyme 0:cd5e3d371b54 196 {
Rhyme 0:cd5e3d371b54 197 page++ ;
Rhyme 0:cd5e3d371b54 198 if (page >= numPage) {
Rhyme 0:cd5e3d371b54 199 page = 0 ;
Rhyme 0:cd5e3d371b54 200 }
Rhyme 0:cd5e3d371b54 201 }
Rhyme 0:cd5e3d371b54 202
Rhyme 0:cd5e3d371b54 203 void decPage(void)
Rhyme 0:cd5e3d371b54 204 {
Rhyme 0:cd5e3d371b54 205 page-- ;
Rhyme 0:cd5e3d371b54 206 if (page < 0) {
Rhyme 0:cd5e3d371b54 207 page = numPage - 1 ;
Rhyme 0:cd5e3d371b54 208 }
Rhyme 0:cd5e3d371b54 209 }
Rhyme 0:cd5e3d371b54 210
Rhyme 0:cd5e3d371b54 211 int main()
Rhyme 0:cd5e3d371b54 212 {
Rhyme 0:cd5e3d371b54 213 uint16_t x, y, z ;
Rhyme 0:cd5e3d371b54 214 int prevPage = 99 ;
Rhyme 0:cd5e3d371b54 215 bool waitTouch = false ;
trevieze 2:c5085faf2aa5 216 point p;
Rhyme 0:cd5e3d371b54 217
Rhyme 0:cd5e3d371b54 218 printf("Hello World\n") ;
Rhyme 0:cd5e3d371b54 219
trevieze 2:c5085faf2aa5 220 //tsc_cs = 1 ;
Rhyme 0:cd5e3d371b54 221 tft_cs = 0 ;
trevieze 2:c5085faf2aa5 222 //initTFT() ;
Rhyme 0:cd5e3d371b54 223 tft_cs = 1 ;
Rhyme 0:cd5e3d371b54 224
trevieze 2:c5085faf2aa5 225 //tsc_cs = 0 ;
trevieze 2:c5085faf2aa5 226 //TSC.spi_format(8, 1) ; // for Nucleo F411RE
trevieze 2:c5085faf2aa5 227 //tsc_cs = 1 ;
Rhyme 0:cd5e3d371b54 228
Rhyme 0:cd5e3d371b54 229 // screen0() ;
Rhyme 0:cd5e3d371b54 230
Rhyme 0:cd5e3d371b54 231 printf("Program Started!\n\r") ;
Rhyme 0:cd5e3d371b54 232
Rhyme 0:cd5e3d371b54 233 for(;;) {
Rhyme 0:cd5e3d371b54 234 // printf("TFT width = %d, height = %d\n\r", TFT.width(), TFT.height()) ;
Rhyme 0:cd5e3d371b54 235 tft_cs = 0 ;
Rhyme 0:cd5e3d371b54 236 switch(page) {
Rhyme 0:cd5e3d371b54 237 case 0:
Rhyme 0:cd5e3d371b54 238 if (prevPage != page) {
Rhyme 0:cd5e3d371b54 239 screen1() ;
Rhyme 0:cd5e3d371b54 240 }
Rhyme 0:cd5e3d371b54 241 waitTouch = true ;
Rhyme 0:cd5e3d371b54 242 break ;
Rhyme 0:cd5e3d371b54 243 case 1:
Rhyme 0:cd5e3d371b54 244 if (prevPage != page) {
Rhyme 0:cd5e3d371b54 245 screen2() ;
Rhyme 0:cd5e3d371b54 246 }
Rhyme 0:cd5e3d371b54 247 waitTouch = true ;
Rhyme 0:cd5e3d371b54 248 break ;
Rhyme 0:cd5e3d371b54 249 default:
Rhyme 0:cd5e3d371b54 250 page = 0 ;
Rhyme 0:cd5e3d371b54 251 break ;
Rhyme 0:cd5e3d371b54 252 }
Rhyme 0:cd5e3d371b54 253 prevPage = page ;
Rhyme 0:cd5e3d371b54 254
Rhyme 0:cd5e3d371b54 255 tft_cs = 1 ;
Rhyme 0:cd5e3d371b54 256 do {
trevieze 2:c5085faf2aa5 257 TSC.getTouch(p);
trevieze 2:c5085faf2aa5 258 printf("Touched X %d\n\r", p.x) ;
trevieze 2:c5085faf2aa5 259 printf("Touched Y %d\n\r", p.y) ;
trevieze 2:c5085faf2aa5 260 printf("Touched Z %d\n\r", p.z) ;
trevieze 2:c5085faf2aa5 261 if (p.z > __PRESURE) {
trevieze 2:c5085faf2aa5 262 if (p.y < 30000) { // left
Rhyme 0:cd5e3d371b54 263 decPage() ;
trevieze 2:c5085faf2aa5 264 } else if (p.y > 90000) { // right
Rhyme 0:cd5e3d371b54 265 incPage() ;
Rhyme 0:cd5e3d371b54 266 }
Rhyme 0:cd5e3d371b54 267 waitTouch = false ;
Rhyme 0:cd5e3d371b54 268 }
trevieze 2:c5085faf2aa5 269 //tsc_cs = 1 ;
trevieze 2:c5085faf2aa5 270 }
trevieze 2:c5085faf2aa5 271 while(waitTouch != false) ;
trevieze 3:6f47fcd415ab 272 //wait(1) ;
Rhyme 0:cd5e3d371b54 273 }
Rhyme 0:cd5e3d371b54 274 }