Simple test program for FRDM-KL25Z and Adafruit 2.8" TFT display. For the touch sensor, only polling mode is implemented.

Dependencies:   MMA8451Q SPI_STMPE610 TSI UniGraphic mbed

This program was to test Adafruit 2.8" TFT with touch with FRDM-KL25Z.
After download the binary to the FRDM-KL25Z and push the reset button ,
a simple welcome message will be displayed.

このプログラムは私が秋月で購入した Adafruit 2.8" TFT
http://akizukidenshi.com/catalog/g/gM-07747/
をFRDM-KL25Z で試すために書いたものです。
ダウンロード後にFRDM-KL25Zのリセットスイッチを押すと
最初の画面が表示されます。

Now using UniGraphic library.
And the problem of remaining previous screen is gone. ;-)
For a little bonus, TS_Eyes and Maze are also included.

UniGraphic ライブラリ版になり、画面にごみが残るバグが治りました。
おまけに TS_Eyes と Maze も追加してあります。 (^ ^)v

/media/uploads/Rhyme/img_0984_ss.jpg

If you push and keep the right side of the screen,
the screen will advance to the page2, which is a simple graph sample.

ここで画面の右側をしばらく押していると、次のページに移行します。
このページでは、簡単なグラフを表示する例を描画しています。

/media/uploads/Rhyme/img_0985_ss.jpg

And if you do the same again, the program advances to the page3,
which is a data display page of MMA8451Q accelerometer mounted on
the FRDM-KL25Z.

さらに画面の右側をしばらく押していると、次のページに移行します。
ここでは、FRDM-KL25Zに搭載されている MMA8451Q という3軸の
加速度センサの値を表示しています。

/media/uploads/Rhyme/img_0986_ss.jpg

And this is the last page of this program, so far, so if you
try to advance page, it will return to the first page.

このページが最後のページになっているので、さらにページ送りをすると
最初のページに戻ります。

Committer:
Rhyme
Date:
Sat Aug 08 12:27:57 2015 +0000
Revision:
4:8c3681dc676f
Parent:
3:34d8706e1614
Now using UniGraphic library. The annoying incomplete cls problem is gone.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:6b8a2d4c88b3 1 /* mbed main.cpp to test adafruit 2.8" TFT LCD shiled w Touchscreen
Rhyme 0:6b8a2d4c88b3 2 * Copyright (c) 2014 Motoo Tanaka @ Design Methodology Lab
Rhyme 0:6b8a2d4c88b3 3 *
Rhyme 0:6b8a2d4c88b3 4 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Rhyme 0:6b8a2d4c88b3 5 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Rhyme 0:6b8a2d4c88b3 6 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Rhyme 0:6b8a2d4c88b3 7 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Rhyme 0:6b8a2d4c88b3 8 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 0:6b8a2d4c88b3 9 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Rhyme 0:6b8a2d4c88b3 10 * THE SOFTWARE.
Rhyme 0:6b8a2d4c88b3 11 */
Rhyme 1:39218b891bf3 12
Rhyme 1:39218b891bf3 13 /*
Rhyme 1:39218b891bf3 14 * Note: This program is derived from the SeeeStudioTFTv2 program.
Rhyme 1:39218b891bf3 15 * Although both program share same ILI9341 TFT driver,
Rhyme 1:39218b891bf3 16 * the touch sensor was not same with the Display I purchased from Akizuki.
Rhyme 1:39218b891bf3 17 * http://akizukidenshi.com/catalog/g/gM-07747/
Rhyme 1:39218b891bf3 18 * The touch sensor on the display is STMPE610,
Rhyme 1:39218b891bf3 19 * so I hacked the minimum spi driver for it (polling mode only).
Rhyme 1:39218b891bf3 20 */
Rhyme 0:6b8a2d4c88b3 21
Rhyme 0:6b8a2d4c88b3 22 #include "mbed.h"
Rhyme 0:6b8a2d4c88b3 23 #include "MMA8451Q.h"
Rhyme 3:34d8706e1614 24 #include "TSISensor.h"
Rhyme 0:6b8a2d4c88b3 25 #include <math.h>
Rhyme 3:34d8706e1614 26 #include "ILI9341.h"
Rhyme 0:6b8a2d4c88b3 27 #include "SPI_STMPE610.h"
Rhyme 0:6b8a2d4c88b3 28 #include "Arial12x12.h"
Rhyme 0:6b8a2d4c88b3 29 #include "Arial24x23.h"
Rhyme 0:6b8a2d4c88b3 30 #include "Arial28x28.h"
Rhyme 3:34d8706e1614 31 #include "Arial43x48_numb.h"
Rhyme 0:6b8a2d4c88b3 32
Rhyme 0:6b8a2d4c88b3 33
Rhyme 0:6b8a2d4c88b3 34 #define PIN_XP PTB3
Rhyme 0:6b8a2d4c88b3 35 #define PIN_XM PTB1
Rhyme 0:6b8a2d4c88b3 36 #define PIN_YP PTB2
Rhyme 0:6b8a2d4c88b3 37 #define PIN_YM PTB0
Rhyme 0:6b8a2d4c88b3 38 #define PIN_MOSI PTD2
Rhyme 0:6b8a2d4c88b3 39 #define PIN_MISO PTD3
Rhyme 0:6b8a2d4c88b3 40 #define PIN_SCLK PTD1
Rhyme 0:6b8a2d4c88b3 41 #define PIN_CS_TFT PTD0
Rhyme 0:6b8a2d4c88b3 42 #define PIN_DC_TFT PTD5
Rhyme 0:6b8a2d4c88b3 43 #define PIN_BL_TFT PTC9
Rhyme 0:6b8a2d4c88b3 44 #define PIN_CS_SD PTA4
Rhyme 0:6b8a2d4c88b3 45 #define PIN_CS_TSC PTA13
Rhyme 0:6b8a2d4c88b3 46 #define PIN_TSC_INTR PTC9
Rhyme 3:34d8706e1614 47 #define PIN_RESET_TFT PTB10
Rhyme 0:6b8a2d4c88b3 48
Rhyme 0:6b8a2d4c88b3 49 #define MMA8451_I2C_ADDRESS (0x1d<<1)
Rhyme 0:6b8a2d4c88b3 50 MMA8451Q *acc = 0 ;
Rhyme 3:34d8706e1614 51 TSISensor tsi;
Rhyme 0:6b8a2d4c88b3 52
Rhyme 3:34d8706e1614 53 DigitalOut backlight(PTA12) ;
Rhyme 3:34d8706e1614 54 ILI9341 TFT(SPI_8, 10000000,
Rhyme 3:34d8706e1614 55 PIN_MOSI, PIN_MISO, PIN_SCLK,
Rhyme 3:34d8706e1614 56 PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
Rhyme 0:6b8a2d4c88b3 57 SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
Rhyme 0:6b8a2d4c88b3 58
Rhyme 0:6b8a2d4c88b3 59 DigitalIn pinD7(PTC9) ;
Rhyme 0:6b8a2d4c88b3 60
Rhyme 0:6b8a2d4c88b3 61 int page = 0 ;
Rhyme 3:34d8706e1614 62 int numPage = 5 ;
Rhyme 3:34d8706e1614 63
Rhyme 3:34d8706e1614 64 extern void doMaze(void) ;
Rhyme 0:6b8a2d4c88b3 65
Rhyme 0:6b8a2d4c88b3 66 void initTFT(void)
Rhyme 0:6b8a2d4c88b3 67 {
Rhyme 0:6b8a2d4c88b3 68 //Configure the display driver
Rhyme 3:34d8706e1614 69 TFT.BusEnable(true) ;
Rhyme 3:34d8706e1614 70 TFT.FastWindow(true) ;
Rhyme 0:6b8a2d4c88b3 71 TFT.background(Black);
Rhyme 0:6b8a2d4c88b3 72 TFT.foreground(White);
Rhyme 0:6b8a2d4c88b3 73 wait(0.01) ;
Rhyme 0:6b8a2d4c88b3 74 TFT.cls();
Rhyme 3:34d8706e1614 75 TFT.BusEnable(false) ;
Rhyme 0:6b8a2d4c88b3 76 }
Rhyme 0:6b8a2d4c88b3 77
Rhyme 0:6b8a2d4c88b3 78 void screen1(void) // Welcome Screen
Rhyme 0:6b8a2d4c88b3 79 {
Rhyme 3:34d8706e1614 80 TFT.BusEnable(true) ;
Rhyme 0:6b8a2d4c88b3 81 backlight = 0 ;
Rhyme 0:6b8a2d4c88b3 82 TFT.background(White) ;
Rhyme 3:34d8706e1614 83 wait(0.1) ;
Rhyme 0:6b8a2d4c88b3 84 TFT.cls() ;
Rhyme 0:6b8a2d4c88b3 85 wait(0.1) ;
Rhyme 3:34d8706e1614 86
Rhyme 0:6b8a2d4c88b3 87 TFT.set_font((unsigned char*) Arial24x23);
Rhyme 0:6b8a2d4c88b3 88 TFT.foreground(Red) ;
Rhyme 0:6b8a2d4c88b3 89 TFT.locate(80, 40) ;
Rhyme 0:6b8a2d4c88b3 90 TFT.printf("MBED") ;
Rhyme 0:6b8a2d4c88b3 91 TFT.foreground(Blue);
Rhyme 0:6b8a2d4c88b3 92 TFT.locate(60, 80) ;
Rhyme 0:6b8a2d4c88b3 93 TFT.printf("2.8\"TFT") ;
Rhyme 0:6b8a2d4c88b3 94 TFT.locate(40, 120) ;
Rhyme 0:6b8a2d4c88b3 95 TFT.printf("with touch") ;
Rhyme 0:6b8a2d4c88b3 96 TFT.foreground(Black);
Rhyme 0:6b8a2d4c88b3 97 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:6b8a2d4c88b3 98 TFT.foreground(Blue) ;
Rhyme 3:34d8706e1614 99 TFT.locate(30, 180) ;
Rhyme 0:6b8a2d4c88b3 100 TFT.printf("This program is running on") ;
Rhyme 3:34d8706e1614 101 TFT.locate(30, 200) ;
Rhyme 0:6b8a2d4c88b3 102 TFT.printf("freescale FRDM-KL25Z with") ;
Rhyme 3:34d8706e1614 103 TFT.locate(30, 220) ;
Rhyme 3:34d8706e1614 104 TFT.printf("a program developed in mbed") ;
Rhyme 0:6b8a2d4c88b3 105 TFT.foreground(Green) ;
Rhyme 3:34d8706e1614 106 TFT.locate(30, 260) ;
Rhyme 0:6b8a2d4c88b3 107 TFT.printf("To advance demo page, touch") ;
Rhyme 3:34d8706e1614 108 TFT.locate(30, 280) ;
Rhyme 0:6b8a2d4c88b3 109 TFT.printf("and hold right side of screen") ;
Rhyme 3:34d8706e1614 110 TFT.locate(30, 300) ;
Rhyme 0:6b8a2d4c88b3 111 TFT.printf("until the next screen starts") ;
Rhyme 3:34d8706e1614 112 TFT.BusEnable(false) ;
Rhyme 0:6b8a2d4c88b3 113 backlight = 1 ;
Rhyme 0:6b8a2d4c88b3 114 }
Rhyme 0:6b8a2d4c88b3 115
Rhyme 0:6b8a2d4c88b3 116 void screen2(void) // Graphics
Rhyme 0:6b8a2d4c88b3 117 {
Rhyme 0:6b8a2d4c88b3 118 //Draw some graphics
Rhyme 0:6b8a2d4c88b3 119 int i, x[2], y[2] ;
Rhyme 0:6b8a2d4c88b3 120 backlight = 0 ;
Rhyme 3:34d8706e1614 121 TFT.BusEnable(true) ;
Rhyme 0:6b8a2d4c88b3 122 TFT.background(Black);
Rhyme 3:34d8706e1614 123 wait(0.1) ;
Rhyme 0:6b8a2d4c88b3 124 TFT.foreground(White);
Rhyme 3:34d8706e1614 125 wait(0.1) ;
Rhyme 0:6b8a2d4c88b3 126 TFT.cls() ;
Rhyme 3:34d8706e1614 127 wait(0.1) ;
Rhyme 0:6b8a2d4c88b3 128 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:6b8a2d4c88b3 129 TFT.locate(90,0);
Rhyme 0:6b8a2d4c88b3 130 TFT.printf("Graphics");
Rhyme 0:6b8a2d4c88b3 131
Rhyme 0:6b8a2d4c88b3 132 x[0] = 25 ; x[1] = 224 ;
Rhyme 0:6b8a2d4c88b3 133 y[0] = 20 ; y[1] = 219 ;
Rhyme 0:6b8a2d4c88b3 134 for (i = 20 ; i < 220 ; i += 10) {
Rhyme 0:6b8a2d4c88b3 135 TFT.line(i+5, y[0], i+5, y[1], Blue) ;
Rhyme 0:6b8a2d4c88b3 136 TFT.line(x[0], i, x[1], i, Blue) ;
Rhyme 0:6b8a2d4c88b3 137 }
Rhyme 0:6b8a2d4c88b3 138 TFT.line(125, y[0], 125, y[1], Green) ;
Rhyme 0:6b8a2d4c88b3 139 TFT.line(x[0], 120, x[1], 120, Green) ;
Rhyme 0:6b8a2d4c88b3 140 TFT.rect(x[0],y[0], x[1], y[1], Green) ;
Rhyme 0:6b8a2d4c88b3 141 TFT.locate(10, 20) ;
Rhyme 0:6b8a2d4c88b3 142 TFT.printf("V") ;
Rhyme 0:6b8a2d4c88b3 143 TFT.locate(0, 115) ;
Rhyme 0:6b8a2d4c88b3 144 TFT.printf("0.0") ;
Rhyme 0:6b8a2d4c88b3 145 TFT.locate(115, 225) ;
Rhyme 0:6b8a2d4c88b3 146 TFT.printf("0.0") ;
Rhyme 0:6b8a2d4c88b3 147 TFT.locate(215, 225) ;
Rhyme 0:6b8a2d4c88b3 148 TFT.printf("T") ;
Rhyme 0:6b8a2d4c88b3 149
Rhyme 0:6b8a2d4c88b3 150 double s;
Rhyme 0:6b8a2d4c88b3 151 for (int i = x[0]; i < 225; i++) {
Rhyme 0:6b8a2d4c88b3 152 s = 40 * sin((long double)i / 20);
Rhyme 0:6b8a2d4c88b3 153 TFT.pixel(i, 120 + (int)s, White);
Rhyme 0:6b8a2d4c88b3 154 }
Rhyme 0:6b8a2d4c88b3 155
Rhyme 0:6b8a2d4c88b3 156 TFT.fillrect(10, 240, 229, 309, White) ;
Rhyme 0:6b8a2d4c88b3 157 TFT.rect(10, 240, 229, 309, Red) ;
Rhyme 0:6b8a2d4c88b3 158 TFT.rect(11, 241, 228, 308, Red) ;
Rhyme 0:6b8a2d4c88b3 159
Rhyme 0:6b8a2d4c88b3 160 TFT.background(White) ;
Rhyme 0:6b8a2d4c88b3 161 TFT.foreground(Black) ;
Rhyme 0:6b8a2d4c88b3 162 TFT.locate(20, 250) ;
Rhyme 0:6b8a2d4c88b3 163 TFT.printf("With QVGA resolution") ;
Rhyme 0:6b8a2d4c88b3 164 TFT.locate(20, 270) ;
Rhyme 0:6b8a2d4c88b3 165 TFT.printf("simple graphics drawing") ;
Rhyme 0:6b8a2d4c88b3 166 TFT.locate(20, 290) ;
Rhyme 0:6b8a2d4c88b3 167 TFT.printf("capability is provided") ;
Rhyme 3:34d8706e1614 168 TFT.BusEnable(false) ;
Rhyme 0:6b8a2d4c88b3 169 backlight = 1 ;
Rhyme 0:6b8a2d4c88b3 170 }
Rhyme 0:6b8a2d4c88b3 171
Rhyme 0:6b8a2d4c88b3 172 double clip(double src)
Rhyme 0:6b8a2d4c88b3 173 {
Rhyme 0:6b8a2d4c88b3 174 double value ;
Rhyme 0:6b8a2d4c88b3 175 value = src ;
Rhyme 0:6b8a2d4c88b3 176 if (value < 0.0) {
Rhyme 0:6b8a2d4c88b3 177 value = 0.0 ;
Rhyme 0:6b8a2d4c88b3 178 } else if (value > 2.0) {
Rhyme 0:6b8a2d4c88b3 179 value = 2.0 ;
Rhyme 0:6b8a2d4c88b3 180 }
Rhyme 0:6b8a2d4c88b3 181 return( value ) ;
Rhyme 0:6b8a2d4c88b3 182 }
Rhyme 0:6b8a2d4c88b3 183
Rhyme 0:6b8a2d4c88b3 184 void screen3(void)
Rhyme 0:6b8a2d4c88b3 185 {
Rhyme 0:6b8a2d4c88b3 186 int t = 0 ;
Rhyme 0:6b8a2d4c88b3 187 int pt = 0 ; // previous t
Rhyme 0:6b8a2d4c88b3 188 int i, x, y ;
Rhyme 0:6b8a2d4c88b3 189 unsigned int data[3] ; // for x, y, z
Rhyme 0:6b8a2d4c88b3 190 unsigned int prev[3] ;
Rhyme 0:6b8a2d4c88b3 191 unsigned short signalHeight = 39 ;
Rhyme 0:6b8a2d4c88b3 192 unsigned short xoffset = 30 ;
Rhyme 0:6b8a2d4c88b3 193 unsigned short yoffset = 120 ;
Rhyme 0:6b8a2d4c88b3 194 unsigned short zoffset = 210 ;
Rhyme 0:6b8a2d4c88b3 195 unsigned short paneX[2] = {20, 235} ;
Rhyme 0:6b8a2d4c88b3 196 unsigned short paneH = 81 ;
Rhyme 0:6b8a2d4c88b3 197
Rhyme 3:34d8706e1614 198 backlight = 1 ;
Rhyme 3:34d8706e1614 199 TFT.BusEnable(true) ;
Rhyme 0:6b8a2d4c88b3 200 TFT.background(Black) ;
Rhyme 0:6b8a2d4c88b3 201 TFT.foreground(White) ;
Rhyme 0:6b8a2d4c88b3 202 // TFT.cls() ;
Rhyme 0:6b8a2d4c88b3 203
Rhyme 0:6b8a2d4c88b3 204
Rhyme 0:6b8a2d4c88b3 205 TFT.fillrect(paneX[0], xoffset, paneX[1], xoffset+paneH, Black) ;
Rhyme 0:6b8a2d4c88b3 206 TFT.fillrect(paneX[0], yoffset, paneX[1], yoffset+paneH, Black) ;
Rhyme 0:6b8a2d4c88b3 207 TFT.fillrect(paneX[0], zoffset, paneX[1], zoffset+paneH, Black) ;
Rhyme 0:6b8a2d4c88b3 208 TFT.fillrect(paneX[0], xoffset, paneX[1], xoffset+paneH, Black) ;
Rhyme 0:6b8a2d4c88b3 209 for (i = 0 ; i < 10 ; i++ ) {
Rhyme 0:6b8a2d4c88b3 210 y = i * 8 ;
Rhyme 0:6b8a2d4c88b3 211 TFT.line(paneX[0], xoffset + y, paneX[1], xoffset + y, Blue) ;
Rhyme 0:6b8a2d4c88b3 212 TFT.line(paneX[0], yoffset + y, paneX[1], yoffset + y, Blue) ;
Rhyme 0:6b8a2d4c88b3 213 TFT.line(paneX[0], zoffset + y, paneX[1], zoffset + y, Blue) ;
Rhyme 0:6b8a2d4c88b3 214 }
Rhyme 0:6b8a2d4c88b3 215 for (x = 30 ; x < paneX[1] ; x += 10 ) {
Rhyme 0:6b8a2d4c88b3 216 TFT.line(x, xoffset, x, xoffset+paneH, Blue) ;
Rhyme 0:6b8a2d4c88b3 217 TFT.line(x, yoffset, x, yoffset+paneH, Blue) ;
Rhyme 0:6b8a2d4c88b3 218 TFT.line(x, zoffset, x, zoffset+paneH, Blue) ;
Rhyme 0:6b8a2d4c88b3 219 }
Rhyme 0:6b8a2d4c88b3 220 TFT.rect(paneX[0], xoffset, paneX[1], xoffset+paneH, White) ;
Rhyme 0:6b8a2d4c88b3 221 TFT.rect(paneX[0], yoffset, paneX[1], yoffset+paneH, White) ;
Rhyme 0:6b8a2d4c88b3 222 TFT.rect(paneX[0], zoffset, paneX[1], zoffset+paneH, White) ;
Rhyme 0:6b8a2d4c88b3 223 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 0:6b8a2d4c88b3 224 TFT.locate(5, xoffset+30) ;
Rhyme 0:6b8a2d4c88b3 225 TFT.printf("X") ;
Rhyme 0:6b8a2d4c88b3 226 TFT.locate(5, yoffset+30) ;
Rhyme 0:6b8a2d4c88b3 227 TFT.printf("Y") ;
Rhyme 0:6b8a2d4c88b3 228 TFT.locate(5, zoffset+30) ;
Rhyme 0:6b8a2d4c88b3 229 TFT.printf("Z") ;
Rhyme 0:6b8a2d4c88b3 230 TFT.locate(50, 10) ;
Rhyme 0:6b8a2d4c88b3 231 TFT.printf("Xtrinsic Accelerometer") ;
Rhyme 0:6b8a2d4c88b3 232 TFT.locate(90, 300) ;
Rhyme 0:6b8a2d4c88b3 233 TFT.printf("MMA8451Q") ;
Rhyme 0:6b8a2d4c88b3 234
Rhyme 0:6b8a2d4c88b3 235 prev[0] = xoffset + (signalHeight * clip((1.0 + acc->getAccX()))) ;
Rhyme 0:6b8a2d4c88b3 236 prev[1] = yoffset + (signalHeight * clip((1.0 + acc->getAccY()))) ;
Rhyme 0:6b8a2d4c88b3 237 prev[2] = zoffset + (signalHeight * clip((1.0 + acc->getAccZ()))) ;
Rhyme 0:6b8a2d4c88b3 238 pt = paneX[0] ;
Rhyme 0:6b8a2d4c88b3 239 backlight = 1 ;
Rhyme 0:6b8a2d4c88b3 240 for(t = 21 ; t < paneX[1] ; t++) {
Rhyme 0:6b8a2d4c88b3 241 data[0] = xoffset + (signalHeight * clip((1.0 + acc->getAccX()))) ;
Rhyme 0:6b8a2d4c88b3 242 data[1] = yoffset + (signalHeight * clip((1.0 + acc->getAccY()))) ;
Rhyme 0:6b8a2d4c88b3 243 data[2] = zoffset + (signalHeight * clip((1.0 + acc->getAccZ()))) ;
Rhyme 0:6b8a2d4c88b3 244 TFT.line(pt, prev[0], t, data[0], Red) ;
Rhyme 0:6b8a2d4c88b3 245 TFT.line(pt, prev[1], t, data[1], Green) ;
Rhyme 0:6b8a2d4c88b3 246 TFT.line(pt, prev[2], t, data[2], Yellow) ;
Rhyme 0:6b8a2d4c88b3 247 prev[0] = data[0] ;
Rhyme 0:6b8a2d4c88b3 248 prev[1] = data[1] ;
Rhyme 0:6b8a2d4c88b3 249 prev[2] = data[2] ;
Rhyme 0:6b8a2d4c88b3 250 pt = t ;
Rhyme 0:6b8a2d4c88b3 251 wait(0.01) ;
Rhyme 0:6b8a2d4c88b3 252 }
Rhyme 3:34d8706e1614 253 TFT.BusEnable(false) ;
Rhyme 3:34d8706e1614 254 }
Rhyme 3:34d8706e1614 255
Rhyme 3:34d8706e1614 256 void screen4(void)
Rhyme 3:34d8706e1614 257 {
Rhyme 3:34d8706e1614 258 int dx, px ;
Rhyme 3:34d8706e1614 259 float delta = 0.0 ;
Rhyme 3:34d8706e1614 260 dx = 0 ;
Rhyme 3:34d8706e1614 261 px = 0 ;
Rhyme 3:34d8706e1614 262 backlight = 0 ;
Rhyme 3:34d8706e1614 263 TFT.BusEnable(true) ;
Rhyme 3:34d8706e1614 264 TFT.background(Black);
Rhyme 3:34d8706e1614 265 wait(0.1) ;
Rhyme 3:34d8706e1614 266 TFT.foreground(White);
Rhyme 3:34d8706e1614 267 wait(0.1) ;
Rhyme 3:34d8706e1614 268 TFT.cls() ;
Rhyme 3:34d8706e1614 269 wait(0.1) ;
Rhyme 3:34d8706e1614 270
Rhyme 3:34d8706e1614 271 TFT.set_font((unsigned char*) Arial12x12);
Rhyme 3:34d8706e1614 272 TFT.foreground(Blue) ;
Rhyme 3:34d8706e1614 273 TFT.locate(60, 10) ;
Rhyme 3:34d8706e1614 274 TFT.printf("<< TSI demo >>") ;
Rhyme 3:34d8706e1614 275 TFT.locate(30, 280) ;
Rhyme 3:34d8706e1614 276 TFT.printf("Use FRDM touch slider") ;
Rhyme 3:34d8706e1614 277 TFT.locate(30, 300) ;
Rhyme 3:34d8706e1614 278 TFT.printf("Touch right edge to end") ;
Rhyme 3:34d8706e1614 279
Rhyme 3:34d8706e1614 280 TFT.fillcircle(120, 160, 100, Green) ;
Rhyme 3:34d8706e1614 281 TFT.fillcircle(60, 160, 50, Black) ;
Rhyme 3:34d8706e1614 282 TFT.fillcircle(60, 160, 45, White) ;
Rhyme 3:34d8706e1614 283 TFT.fillcircle(180, 160, 50, Black) ;
Rhyme 3:34d8706e1614 284 TFT.fillcircle(180, 160, 45, White) ;
Rhyme 3:34d8706e1614 285 TFT.fillcircle(60, 160, 5, Black) ;
Rhyme 3:34d8706e1614 286 TFT.fillcircle(180, 160, 5, Black) ;
Rhyme 3:34d8706e1614 287 backlight = 1 ;
Rhyme 3:34d8706e1614 288
Rhyme 3:34d8706e1614 289 while(dx < 38) {
Rhyme 3:34d8706e1614 290 delta = (80.0 * (tsi.readPercentage()-0.5)) ;
Rhyme 3:34d8706e1614 291 dx = (int)(delta + 0.5) ;
Rhyme 3:34d8706e1614 292 TFT.fillcircle(60+px, 160, 5, White) ;
Rhyme 3:34d8706e1614 293 TFT.fillcircle(180+px, 160, 5, White) ;
Rhyme 3:34d8706e1614 294 TFT.fillcircle(60+dx, 160, 5, Black) ;
Rhyme 3:34d8706e1614 295 TFT.fillcircle(180+dx, 160, 5, Black) ;
Rhyme 3:34d8706e1614 296 px = dx ;
Rhyme 3:34d8706e1614 297 wait(0.1) ;
Rhyme 3:34d8706e1614 298 }
Rhyme 3:34d8706e1614 299 TFT.fillcircle(60+px, 160, 5, White) ;
Rhyme 3:34d8706e1614 300 TFT.fillcircle(180+px, 160, 5, White) ;
Rhyme 3:34d8706e1614 301 TFT.line(15, 160, 105, 160, Black) ;
Rhyme 3:34d8706e1614 302 TFT.line(135, 160, 225, 160, Black) ;
Rhyme 3:34d8706e1614 303 TFT.foreground(Yellow) ;
Rhyme 3:34d8706e1614 304 TFT.locate(30, 300) ;
Rhyme 3:34d8706e1614 305 // TFT.printf("Use FRDM touch slider") ;
Rhyme 3:34d8706e1614 306 TFT.printf(" Wake Up! ") ;
Rhyme 3:34d8706e1614 307 TFT.locate(5, 300) ;
Rhyme 3:34d8706e1614 308 TFT.printf("<< Prev") ;
Rhyme 3:34d8706e1614 309 TFT.locate(180, 300) ;
Rhyme 3:34d8706e1614 310 TFT.printf("Next >>") ;
Rhyme 3:34d8706e1614 311 TFT.BusEnable(false) ;
Rhyme 0:6b8a2d4c88b3 312 }
Rhyme 0:6b8a2d4c88b3 313
Rhyme 0:6b8a2d4c88b3 314 void incPage(void)
Rhyme 0:6b8a2d4c88b3 315 {
Rhyme 0:6b8a2d4c88b3 316 page++ ;
Rhyme 0:6b8a2d4c88b3 317 if (page >= numPage) {
Rhyme 0:6b8a2d4c88b3 318 page = 0 ;
Rhyme 0:6b8a2d4c88b3 319 }
Rhyme 0:6b8a2d4c88b3 320 }
Rhyme 0:6b8a2d4c88b3 321
Rhyme 0:6b8a2d4c88b3 322 void decPage(void)
Rhyme 0:6b8a2d4c88b3 323 {
Rhyme 0:6b8a2d4c88b3 324 page-- ;
Rhyme 0:6b8a2d4c88b3 325 if (page < 0) {
Rhyme 0:6b8a2d4c88b3 326 page = numPage - 1 ;
Rhyme 0:6b8a2d4c88b3 327 }
Rhyme 0:6b8a2d4c88b3 328 }
Rhyme 0:6b8a2d4c88b3 329
Rhyme 0:6b8a2d4c88b3 330 int main()
Rhyme 0:6b8a2d4c88b3 331 {
Rhyme 0:6b8a2d4c88b3 332 uint16_t x, y, z ;
Rhyme 3:34d8706e1614 333 int prevPage = 99 ;
Rhyme 3:34d8706e1614 334 bool waitTouch = false ;
Rhyme 0:6b8a2d4c88b3 335
Rhyme 0:6b8a2d4c88b3 336 acc = new MMA8451Q(PTE25, PTE24, MMA8451_I2C_ADDRESS) ;
Rhyme 0:6b8a2d4c88b3 337
Rhyme 0:6b8a2d4c88b3 338 initTFT() ;
Rhyme 0:6b8a2d4c88b3 339
Rhyme 3:34d8706e1614 340 // screen0() ;
Rhyme 0:6b8a2d4c88b3 341
Rhyme 0:6b8a2d4c88b3 342 printf("Program Started!\n\r") ;
Rhyme 0:6b8a2d4c88b3 343
Rhyme 0:6b8a2d4c88b3 344 for(;;) {
Rhyme 0:6b8a2d4c88b3 345 // printf("TFT width = %d, height = %d\n\r", TFT.width(), TFT.height()) ;
Rhyme 0:6b8a2d4c88b3 346 switch(page) {
Rhyme 0:6b8a2d4c88b3 347 case 0:
Rhyme 0:6b8a2d4c88b3 348 if (prevPage != page) {
Rhyme 0:6b8a2d4c88b3 349 screen1() ;
Rhyme 0:6b8a2d4c88b3 350 }
Rhyme 3:34d8706e1614 351 waitTouch = true ;
Rhyme 0:6b8a2d4c88b3 352 break ;
Rhyme 0:6b8a2d4c88b3 353 case 1:
Rhyme 0:6b8a2d4c88b3 354 if (prevPage != page) {
Rhyme 0:6b8a2d4c88b3 355 screen2() ;
Rhyme 0:6b8a2d4c88b3 356 }
Rhyme 3:34d8706e1614 357 waitTouch = true ;
Rhyme 0:6b8a2d4c88b3 358 break ;
Rhyme 0:6b8a2d4c88b3 359 case 2:
Rhyme 0:6b8a2d4c88b3 360 if (prevPage != page) {
Rhyme 3:34d8706e1614 361 TFT.BusEnable(true) ;
Rhyme 0:6b8a2d4c88b3 362 TFT.background(Black) ;
Rhyme 0:6b8a2d4c88b3 363 TFT.foreground(White) ;
Rhyme 0:6b8a2d4c88b3 364 TFT.cls() ;
Rhyme 3:34d8706e1614 365 TFT.BusEnable(false) ;
Rhyme 0:6b8a2d4c88b3 366 }
Rhyme 0:6b8a2d4c88b3 367 screen3() ;
Rhyme 3:34d8706e1614 368 waitTouch = false ;
Rhyme 3:34d8706e1614 369 break ;
Rhyme 3:34d8706e1614 370 case 3:
Rhyme 3:34d8706e1614 371 // if (prevPage != page) {
Rhyme 3:34d8706e1614 372 screen4() ;
Rhyme 3:34d8706e1614 373 waitTouch = true ;
Rhyme 3:34d8706e1614 374 // }
Rhyme 3:34d8706e1614 375 break ;
Rhyme 3:34d8706e1614 376 case 4:
Rhyme 3:34d8706e1614 377 // if (prevPage != page) {
Rhyme 3:34d8706e1614 378 doMaze() ;
Rhyme 3:34d8706e1614 379 waitTouch = true ;
Rhyme 3:34d8706e1614 380 // }
Rhyme 0:6b8a2d4c88b3 381 break ;
Rhyme 0:6b8a2d4c88b3 382 default:
Rhyme 0:6b8a2d4c88b3 383 page = 0 ;
Rhyme 0:6b8a2d4c88b3 384 break ;
Rhyme 0:6b8a2d4c88b3 385 }
Rhyme 0:6b8a2d4c88b3 386 prevPage = page ;
Rhyme 0:6b8a2d4c88b3 387
Rhyme 3:34d8706e1614 388 do {
Rhyme 3:34d8706e1614 389 TSC.getRAWPoint(&x, &y, &z) ;
Rhyme 3:34d8706e1614 390 if ((x != 0)||(y != 0) || (z != 0)) {
Rhyme 3:34d8706e1614 391 if (x < 1000) { // left
Rhyme 3:34d8706e1614 392 decPage() ;
Rhyme 3:34d8706e1614 393 } else if (x > 3000) { // right
Rhyme 3:34d8706e1614 394 incPage() ;
Rhyme 3:34d8706e1614 395 }
Rhyme 3:34d8706e1614 396 waitTouch = false ;
Rhyme 0:6b8a2d4c88b3 397 }
Rhyme 3:34d8706e1614 398 } while(waitTouch != false) ;
Rhyme 0:6b8a2d4c88b3 399 // wait(1) ;
Rhyme 0:6b8a2d4c88b3 400 }
Rhyme 0:6b8a2d4c88b3 401 }