Works

Dependencies:   BMP180 BNO055_fusion Fonts GPSISR HTU21D SDFileSystem UniGraphic mbed uGUI

Fork of Bicycl_Computer_NUCLEO-F411RE by Darren Ulrich

Committer:
trevieze
Date:
Thu Dec 15 19:49:36 2016 +0000
Revision:
1:e265e7245ab8
Parent:
0:cd5e3d371b54
Child:
2:c5085faf2aa5
This is the first ILI9341 library that works! Yea!

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"
Rhyme 0:cd5e3d371b54 25 #include "SPI_STMPE610.h"
Rhyme 0:cd5e3d371b54 26 #include "Arial12x12.h"
Rhyme 0:cd5e3d371b54 27 #include "Arial24x23.h"
Rhyme 0:cd5e3d371b54 28 #include "Arial28x28.h"
Rhyme 0:cd5e3d371b54 29 #include "Arial43x48_numb.h"
Rhyme 0:cd5e3d371b54 30
trevieze 1:e265e7245ab8 31 /*
Rhyme 0:cd5e3d371b54 32 #define PIN_MOSI PA_7
Rhyme 0:cd5e3d371b54 33 #define PIN_MISO PA_6
Rhyme 0:cd5e3d371b54 34 #define PIN_SCLK PA_5
Rhyme 0:cd5e3d371b54 35 #define PIN_CS_TFT PB_6
Rhyme 0:cd5e3d371b54 36 #define PIN_DC_TFT PC_7
Rhyme 0:cd5e3d371b54 37 #define PIN_BL_TFT PA_8
Rhyme 0:cd5e3d371b54 38 #define PIN_CS_SD PB_5
trevieze 1:e265e7245ab8 39 */
Rhyme 0:cd5e3d371b54 40 #define PIN_CS_TSC PA_9
Rhyme 0:cd5e3d371b54 41 #define PIN_TSC_INTR PA_8
Rhyme 0:cd5e3d371b54 42 #define PIN_RESET_TFT PC_13 /* place holder */
trevieze 1:e265e7245ab8 43
trevieze 1:e265e7245ab8 44 #define PIN_XP A3
trevieze 1:e265e7245ab8 45 #define PIN_XM A1
trevieze 1:e265e7245ab8 46 #define PIN_YP A2
trevieze 1:e265e7245ab8 47 #define PIN_YM A0
trevieze 1:e265e7245ab8 48 #define PIN_MOSI D11
trevieze 1:e265e7245ab8 49 #define PIN_MISO D12
trevieze 1:e265e7245ab8 50 #define PIN_SCLK D13
trevieze 1:e265e7245ab8 51 #define PIN_CS_TFT D5
trevieze 1:e265e7245ab8 52 #define PIN_DC_TFT D6
trevieze 1:e265e7245ab8 53 #define PIN_BL_TFT D7
trevieze 1:e265e7245ab8 54 #define PIN_CS_SD D4
trevieze 1:e265e7245ab8 55
Rhyme 0:cd5e3d371b54 56 #define DEVICE_NAME "F411RE"
Rhyme 0:cd5e3d371b54 57
Rhyme 0:cd5e3d371b54 58 #ifndef TARGET_NECLEO_F411RE
Rhyme 0:cd5e3d371b54 59 #define TARGET_NECLEO_F411RE
Rhyme 0:cd5e3d371b54 60 #endif
Rhyme 0:cd5e3d371b54 61
Rhyme 0:cd5e3d371b54 62
Rhyme 0:cd5e3d371b54 63 DigitalOut backlight(PB_3) ;
Rhyme 0:cd5e3d371b54 64 DigitalOut tsc_cs(PA_9, 1) ;
Rhyme 0:cd5e3d371b54 65 DigitalOut tft_cs(PB_6, 1) ;
Rhyme 0:cd5e3d371b54 66
Rhyme 0:cd5e3d371b54 67 ILI9341 TFT(SPI_8, 10000000,
Rhyme 0:cd5e3d371b54 68 PIN_MOSI, PIN_MISO, PIN_SCLK,
Rhyme 0:cd5e3d371b54 69 PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
Rhyme 0:cd5e3d371b54 70 SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
Rhyme 0:cd5e3d371b54 71
Rhyme 0:cd5e3d371b54 72 int page = 0 ;
Rhyme 0:cd5e3d371b54 73 int numPage = 2 ;
Rhyme 0:cd5e3d371b54 74
Rhyme 0:cd5e3d371b54 75 void initTFT(void)
Rhyme 0:cd5e3d371b54 76 {
Rhyme 0:cd5e3d371b54 77 //Configure the display driver
Rhyme 0:cd5e3d371b54 78 TFT.BusEnable(true) ;
Rhyme 0:cd5e3d371b54 79 TFT.FastWindow(true) ;
Rhyme 0:cd5e3d371b54 80 TFT.background(Black);
Rhyme 0:cd5e3d371b54 81 TFT.foreground(White);
Rhyme 0:cd5e3d371b54 82 wait(0.01) ;
Rhyme 0:cd5e3d371b54 83 TFT.cls();
Rhyme 0:cd5e3d371b54 84 TFT.BusEnable(false) ;
Rhyme 0:cd5e3d371b54 85 }
Rhyme 0:cd5e3d371b54 86
Rhyme 0:cd5e3d371b54 87 void screen1(void) // Welcome Screen
Rhyme 0:cd5e3d371b54 88 {
Rhyme 0:cd5e3d371b54 89 TFT.BusEnable(true) ;
Rhyme 0:cd5e3d371b54 90 backlight = 0 ;
Rhyme 0:cd5e3d371b54 91 TFT.background(White) ;
Rhyme 0:cd5e3d371b54 92 wait(0.1) ;
Rhyme 0:cd5e3d371b54 93 TFT.cls() ;
Rhyme 0:cd5e3d371b54 94 wait(0.1) ;
Rhyme 0:cd5e3d371b54 95
Rhyme 0:cd5e3d371b54 96 TFT.set_font((unsigned char*) Arial24x23);
Rhyme 0:cd5e3d371b54 97 TFT.foreground(Red) ;
Rhyme 0:cd5e3d371b54 98 TFT.locate(80, 40) ;
Rhyme 0:cd5e3d371b54 99 TFT.printf("MBED") ;
Rhyme 0:cd5e3d371b54 100 TFT.foreground(Blue);
Rhyme 0:cd5e3d371b54 101 TFT.locate(60, 80) ;
Rhyme 0:cd5e3d371b54 102 TFT.printf("2.8\"TFT") ;
Rhyme 0:cd5e3d371b54 103 TFT.locate(40, 120) ;
Rhyme 0:cd5e3d371b54 104 TFT.printf("with touch") ;
Rhyme 0:cd5e3d371b54 105 TFT.foreground(Black);
Rhyme 0:cd5e3d371b54 106 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:cd5e3d371b54 107 TFT.foreground(Blue) ;
Rhyme 0:cd5e3d371b54 108 TFT.locate(30, 180) ;
Rhyme 0:cd5e3d371b54 109 TFT.printf("This program is running on") ;
Rhyme 0:cd5e3d371b54 110 TFT.locate(30, 200) ;
Rhyme 0:cd5e3d371b54 111 TFT.printf("ST Nucleo F411RE with") ;
Rhyme 0:cd5e3d371b54 112 TFT.locate(30, 220) ;
Rhyme 0:cd5e3d371b54 113 TFT.printf("a program developed in mbed") ;
Rhyme 0:cd5e3d371b54 114 TFT.foreground(Green) ;
Rhyme 0:cd5e3d371b54 115 TFT.locate(30, 260) ;
Rhyme 0:cd5e3d371b54 116 TFT.printf("To advance demo page, touch") ;
Rhyme 0:cd5e3d371b54 117 TFT.locate(30, 280) ;
Rhyme 0:cd5e3d371b54 118 TFT.printf("and hold right side of screen") ;
Rhyme 0:cd5e3d371b54 119 TFT.locate(30, 300) ;
Rhyme 0:cd5e3d371b54 120 TFT.printf("until the next screen starts") ;
Rhyme 0:cd5e3d371b54 121 TFT.BusEnable(false) ;
Rhyme 0:cd5e3d371b54 122 backlight = 1 ;
Rhyme 0:cd5e3d371b54 123 }
Rhyme 0:cd5e3d371b54 124
Rhyme 0:cd5e3d371b54 125 void screen2(void) // Graphics
Rhyme 0:cd5e3d371b54 126 {
Rhyme 0:cd5e3d371b54 127 //Draw some graphics
Rhyme 0:cd5e3d371b54 128 int i, x[2], y[2] ;
Rhyme 0:cd5e3d371b54 129 backlight = 0 ;
Rhyme 0:cd5e3d371b54 130 TFT.BusEnable(true) ;
Rhyme 0:cd5e3d371b54 131 TFT.background(Black);
Rhyme 0:cd5e3d371b54 132 wait(0.1) ;
Rhyme 0:cd5e3d371b54 133 TFT.foreground(White);
Rhyme 0:cd5e3d371b54 134 wait(0.1) ;
Rhyme 0:cd5e3d371b54 135 TFT.cls() ;
Rhyme 0:cd5e3d371b54 136 wait(0.1) ;
Rhyme 0:cd5e3d371b54 137 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:cd5e3d371b54 138 TFT.locate(90,0);
Rhyme 0:cd5e3d371b54 139 TFT.printf("Graphics");
Rhyme 0:cd5e3d371b54 140
Rhyme 0:cd5e3d371b54 141 x[0] = 25 ; x[1] = 224 ;
Rhyme 0:cd5e3d371b54 142 y[0] = 20 ; y[1] = 219 ;
Rhyme 0:cd5e3d371b54 143 for (i = 20 ; i < 220 ; i += 10) {
Rhyme 0:cd5e3d371b54 144 TFT.line(i+5, y[0], i+5, y[1], Blue) ;
Rhyme 0:cd5e3d371b54 145 TFT.line(x[0], i, x[1], i, Blue) ;
Rhyme 0:cd5e3d371b54 146 }
Rhyme 0:cd5e3d371b54 147 TFT.line(125, y[0], 125, y[1], Green) ;
Rhyme 0:cd5e3d371b54 148 TFT.line(x[0], 120, x[1], 120, Green) ;
Rhyme 0:cd5e3d371b54 149 TFT.rect(x[0],y[0], x[1], y[1], Green) ;
Rhyme 0:cd5e3d371b54 150 TFT.locate(10, 20) ;
Rhyme 0:cd5e3d371b54 151 TFT.printf("V") ;
Rhyme 0:cd5e3d371b54 152 TFT.locate(0, 115) ;
Rhyme 0:cd5e3d371b54 153 TFT.printf("0.0") ;
Rhyme 0:cd5e3d371b54 154 TFT.locate(115, 225) ;
Rhyme 0:cd5e3d371b54 155 TFT.printf("0.0") ;
Rhyme 0:cd5e3d371b54 156 TFT.locate(215, 225) ;
Rhyme 0:cd5e3d371b54 157 TFT.printf("T") ;
Rhyme 0:cd5e3d371b54 158
Rhyme 0:cd5e3d371b54 159 double s;
Rhyme 0:cd5e3d371b54 160 for (int i = x[0]; i < 225; i++) {
Rhyme 0:cd5e3d371b54 161 s = 40 * sin((long double)i / 20);
Rhyme 0:cd5e3d371b54 162 TFT.pixel(i, 120 + (int)s, White);
Rhyme 0:cd5e3d371b54 163 }
Rhyme 0:cd5e3d371b54 164
Rhyme 0:cd5e3d371b54 165 TFT.fillrect(10, 240, 229, 309, White) ;
Rhyme 0:cd5e3d371b54 166 TFT.rect(10, 240, 229, 309, Red) ;
Rhyme 0:cd5e3d371b54 167 TFT.rect(11, 241, 228, 308, Red) ;
Rhyme 0:cd5e3d371b54 168
Rhyme 0:cd5e3d371b54 169 TFT.background(White) ;
Rhyme 0:cd5e3d371b54 170 TFT.foreground(Black) ;
Rhyme 0:cd5e3d371b54 171 TFT.locate(20, 250) ;
Rhyme 0:cd5e3d371b54 172 TFT.printf("With QVGA resolution") ;
Rhyme 0:cd5e3d371b54 173 TFT.locate(20, 270) ;
Rhyme 0:cd5e3d371b54 174 TFT.printf("simple graphics drawing") ;
Rhyme 0:cd5e3d371b54 175 TFT.locate(20, 290) ;
Rhyme 0:cd5e3d371b54 176 TFT.printf("capability is provided") ;
Rhyme 0:cd5e3d371b54 177 TFT.BusEnable(false) ;
Rhyme 0:cd5e3d371b54 178 backlight = 1 ;
Rhyme 0:cd5e3d371b54 179 }
Rhyme 0:cd5e3d371b54 180
Rhyme 0:cd5e3d371b54 181 double clip(double src)
Rhyme 0:cd5e3d371b54 182 {
Rhyme 0:cd5e3d371b54 183 double value ;
Rhyme 0:cd5e3d371b54 184 value = src ;
Rhyme 0:cd5e3d371b54 185 if (value < 0.0) {
Rhyme 0:cd5e3d371b54 186 value = 0.0 ;
Rhyme 0:cd5e3d371b54 187 } else if (value > 2.0) {
Rhyme 0:cd5e3d371b54 188 value = 2.0 ;
Rhyme 0:cd5e3d371b54 189 }
Rhyme 0:cd5e3d371b54 190 return( value ) ;
Rhyme 0:cd5e3d371b54 191 }
Rhyme 0:cd5e3d371b54 192
Rhyme 0:cd5e3d371b54 193 void incPage(void)
Rhyme 0:cd5e3d371b54 194 {
Rhyme 0:cd5e3d371b54 195 page++ ;
Rhyme 0:cd5e3d371b54 196 if (page >= numPage) {
Rhyme 0:cd5e3d371b54 197 page = 0 ;
Rhyme 0:cd5e3d371b54 198 }
Rhyme 0:cd5e3d371b54 199 }
Rhyme 0:cd5e3d371b54 200
Rhyme 0:cd5e3d371b54 201 void decPage(void)
Rhyme 0:cd5e3d371b54 202 {
Rhyme 0:cd5e3d371b54 203 page-- ;
Rhyme 0:cd5e3d371b54 204 if (page < 0) {
Rhyme 0:cd5e3d371b54 205 page = numPage - 1 ;
Rhyme 0:cd5e3d371b54 206 }
Rhyme 0:cd5e3d371b54 207 }
Rhyme 0:cd5e3d371b54 208
Rhyme 0:cd5e3d371b54 209 int main()
Rhyme 0:cd5e3d371b54 210 {
Rhyme 0:cd5e3d371b54 211 uint16_t x, y, z ;
Rhyme 0:cd5e3d371b54 212 int prevPage = 99 ;
Rhyme 0:cd5e3d371b54 213 bool waitTouch = false ;
Rhyme 0:cd5e3d371b54 214
Rhyme 0:cd5e3d371b54 215 printf("Hello World\n") ;
Rhyme 0:cd5e3d371b54 216
Rhyme 0:cd5e3d371b54 217 tsc_cs = 1 ;
Rhyme 0:cd5e3d371b54 218 tft_cs = 0 ;
Rhyme 0:cd5e3d371b54 219 initTFT() ;
Rhyme 0:cd5e3d371b54 220 tft_cs = 1 ;
Rhyme 0:cd5e3d371b54 221
Rhyme 0:cd5e3d371b54 222 tsc_cs = 0 ;
Rhyme 0:cd5e3d371b54 223 TSC.spi_format(8, 1) ; // for Nucleo F411RE
Rhyme 0:cd5e3d371b54 224 tsc_cs = 1 ;
Rhyme 0:cd5e3d371b54 225
Rhyme 0:cd5e3d371b54 226 // screen0() ;
Rhyme 0:cd5e3d371b54 227
Rhyme 0:cd5e3d371b54 228 printf("Program Started!\n\r") ;
Rhyme 0:cd5e3d371b54 229
Rhyme 0:cd5e3d371b54 230 for(;;) {
Rhyme 0:cd5e3d371b54 231 // printf("TFT width = %d, height = %d\n\r", TFT.width(), TFT.height()) ;
Rhyme 0:cd5e3d371b54 232 tft_cs = 0 ;
Rhyme 0:cd5e3d371b54 233 switch(page) {
Rhyme 0:cd5e3d371b54 234 case 0:
Rhyme 0:cd5e3d371b54 235 if (prevPage != page) {
Rhyme 0:cd5e3d371b54 236 screen1() ;
Rhyme 0:cd5e3d371b54 237 }
Rhyme 0:cd5e3d371b54 238 waitTouch = true ;
Rhyme 0:cd5e3d371b54 239 break ;
Rhyme 0:cd5e3d371b54 240 case 1:
Rhyme 0:cd5e3d371b54 241 if (prevPage != page) {
Rhyme 0:cd5e3d371b54 242 screen2() ;
Rhyme 0:cd5e3d371b54 243 }
Rhyme 0:cd5e3d371b54 244 waitTouch = true ;
Rhyme 0:cd5e3d371b54 245 break ;
Rhyme 0:cd5e3d371b54 246 default:
Rhyme 0:cd5e3d371b54 247 page = 0 ;
Rhyme 0:cd5e3d371b54 248 break ;
Rhyme 0:cd5e3d371b54 249 }
Rhyme 0:cd5e3d371b54 250 prevPage = page ;
Rhyme 0:cd5e3d371b54 251
Rhyme 0:cd5e3d371b54 252 tft_cs = 1 ;
Rhyme 0:cd5e3d371b54 253 do {
Rhyme 0:cd5e3d371b54 254 tsc_cs = 0 ;
Rhyme 0:cd5e3d371b54 255 TSC.getRAWPoint(&x, &y, &z) ;
Rhyme 0:cd5e3d371b54 256 if ((x != 0)||(y != 0) || (z != 0)) {
Rhyme 0:cd5e3d371b54 257 if (x < 1000) { // left
Rhyme 0:cd5e3d371b54 258 decPage() ;
Rhyme 0:cd5e3d371b54 259 } else if (x > 3000) { // right
Rhyme 0:cd5e3d371b54 260 incPage() ;
Rhyme 0:cd5e3d371b54 261 }
Rhyme 0:cd5e3d371b54 262 waitTouch = false ;
Rhyme 0:cd5e3d371b54 263 }
Rhyme 0:cd5e3d371b54 264 tsc_cs = 1 ;
Rhyme 0:cd5e3d371b54 265 } while(waitTouch != false) ;
Rhyme 0:cd5e3d371b54 266 // wait(1) ;
Rhyme 0:cd5e3d371b54 267 }
Rhyme 0:cd5e3d371b54 268 }