Touchscreen digit recognition

Dependencies:   mbed TFT_fonts SPI_TFT_ILI9341 Adafruit_GFX FT6206 MMA8451Q

Committer:
rankedss
Date:
Thu Jan 16 23:07:38 2020 +0000
Revision:
1:c44001c6bbf8
Parent:
0:5264c6cecce9
finalize

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 0:5264c6cecce9 1 #include "mbed.h"
JackB 0:5264c6cecce9 2 #include "SPI_TFT_ILI9341.h"
JackB 0:5264c6cecce9 3 #include "FT6206.h"
rankedss 1:c44001c6bbf8 4 #include <algorithm>
rankedss 1:c44001c6bbf8 5 #include <string>
rankedss 1:c44001c6bbf8 6 #include "weigths.hpp"
rankedss 1:c44001c6bbf8 7
rankedss 1:c44001c6bbf8 8 // Accelorameter
rankedss 1:c44001c6bbf8 9 #include "MMA8451Q.h"
rankedss 1:c44001c6bbf8 10 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
rankedss 1:c44001c6bbf8 11 PinName const SDA = PTE25;
rankedss 1:c44001c6bbf8 12 PinName const SCL = PTE24;
rankedss 1:c44001c6bbf8 13 #elif defined (TARGET_KL05Z)
rankedss 1:c44001c6bbf8 14 PinName const SDA = PTB4;
rankedss 1:c44001c6bbf8 15 PinName const SCL = PTB3;
rankedss 1:c44001c6bbf8 16 #elif defined (TARGET_K20D50M)
rankedss 1:c44001c6bbf8 17 PinName const SDA = PTB1;
rankedss 1:c44001c6bbf8 18 PinName const SCL = PTB0;
rankedss 1:c44001c6bbf8 19 #else
rankedss 1:c44001c6bbf8 20 #error TARGET NOT DEFINED
rankedss 1:c44001c6bbf8 21 #endif
rankedss 1:c44001c6bbf8 22 #define MMA8451_I2C_ADDRESS (0x1d<<1)
JackB 0:5264c6cecce9 23
JackB 0:5264c6cecce9 24 #include "Arial12x12.h"
rankedss 1:c44001c6bbf8 25 #include "Arial24x23.h"
rankedss 1:c44001c6bbf8 26 #include "Arial28x28.h"
JackB 0:5264c6cecce9 27
JackB 0:5264c6cecce9 28 #define PIN_XP A3
JackB 0:5264c6cecce9 29 #define PIN_XM A1
JackB 0:5264c6cecce9 30 #define PIN_YP A2
JackB 0:5264c6cecce9 31 #define PIN_YM A0
JackB 0:5264c6cecce9 32 #define PIN_SCLK D13
JackB 0:5264c6cecce9 33 #define PIN_MISO D12
JackB 0:5264c6cecce9 34 #define PIN_MOSI D11
JackB 0:5264c6cecce9 35 #define PIN_CS_TFT D10 // chip select pin
JackB 0:5264c6cecce9 36 #define PIN_DC_TFT D9 // data/command select pin.
JackB 0:5264c6cecce9 37 #define PIN_RESET_TFT D8
JackB 0:5264c6cecce9 38 //#define PIN_BL_TFT D7
JackB 0:5264c6cecce9 39 #define PIN_CS_SD D4
JackB 0:5264c6cecce9 40
JackB 0:5264c6cecce9 41 #define PORTRAIT 0
JackB 0:5264c6cecce9 42 #define LANDSCAPE 1
JackB 0:5264c6cecce9 43
rankedss 1:c44001c6bbf8 44 #define PIN_SCL_FT6206 A5
rankedss 1:c44001c6bbf8 45 #define PIN_SDA_FT6206 A4
JackB 0:5264c6cecce9 46 #define PIN_INT_FT6206 D7
JackB 0:5264c6cecce9 47
JackB 0:5264c6cecce9 48 #define ILI9341_TFTWIDTH 320
JackB 0:5264c6cecce9 49 #define ILI9341_TFTHEIGHT 240
JackB 0:5264c6cecce9 50
JackB 0:5264c6cecce9 51 DigitalOut led1(LED1);
JackB 0:5264c6cecce9 52 DigitalOut led2(LED2);
JackB 0:5264c6cecce9 53 DigitalOut led3(LED3);
JackB 0:5264c6cecce9 54 DigitalOut led4(LED4);
JackB 0:5264c6cecce9 55
JackB 0:5264c6cecce9 56 //SPI_TFT_ILI9341 TFT(p5, p6, p7, p8, p9, p10,"TFT"); // mosi, miso, sclk, cs, reset, dc
rankedss 1:c44001c6bbf8 57 SPI_TFT_ILI9341 TFT(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "TFT"); // mosi, miso, sclk, cs, reset, dc
JackB 0:5264c6cecce9 58 FT6206 FT6206(PIN_SDA_FT6206, PIN_SCL_FT6206, PIN_INT_FT6206); // sda, scl, int
rankedss 1:c44001c6bbf8 59 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
JackB 0:5264c6cecce9 60
rankedss 1:c44001c6bbf8 61 int maxIndex(float vector_name[])
rankedss 1:c44001c6bbf8 62 {
rankedss 1:c44001c6bbf8 63 double max = vector_name[0];
rankedss 1:c44001c6bbf8 64 int index = 0;
rankedss 1:c44001c6bbf8 65 for (int i = 0; i != 10; i++) {
rankedss 1:c44001c6bbf8 66 if (max < vector_name[i]) {
rankedss 1:c44001c6bbf8 67 max = vector_name[i];
rankedss 1:c44001c6bbf8 68 index = i;
rankedss 1:c44001c6bbf8 69 }
rankedss 1:c44001c6bbf8 70 }
rankedss 1:c44001c6bbf8 71 return index;
rankedss 1:c44001c6bbf8 72 }
rankedss 1:c44001c6bbf8 73
rankedss 1:c44001c6bbf8 74 float RELU(float x)
rankedss 1:c44001c6bbf8 75 {
rankedss 1:c44001c6bbf8 76 return std::max(0.0f, x);
rankedss 1:c44001c6bbf8 77 }
rankedss 1:c44001c6bbf8 78
rankedss 1:c44001c6bbf8 79 int FeedForward()
rankedss 1:c44001c6bbf8 80 {
rankedss 1:c44001c6bbf8 81 float convImages[kernel_count][convImageSize][convImageSize] = {0.0f};
rankedss 1:c44001c6bbf8 82
rankedss 1:c44001c6bbf8 83 for (unsigned f = 0; f != kernel_count; f++) {
rankedss 1:c44001c6bbf8 84 for (unsigned i = 0; i <= image_size - kernel_size; i += stride) {
rankedss 1:c44001c6bbf8 85 for (unsigned j = 0; j <= image_size - kernel_size; j += stride) {
rankedss 1:c44001c6bbf8 86 for (unsigned k = i; k < i + kernel_size; k++) {
rankedss 1:c44001c6bbf8 87 for (unsigned l = j; l < j + kernel_size; l++) {
rankedss 1:c44001c6bbf8 88 convImages[f][i / stride][j / stride] += image[k][l] * kernels[f][k - i][l - j];
rankedss 1:c44001c6bbf8 89 }
rankedss 1:c44001c6bbf8 90 }
rankedss 1:c44001c6bbf8 91 convImages[f][i / stride][j / stride] += bias_kernels[f];
rankedss 1:c44001c6bbf8 92 }
rankedss 1:c44001c6bbf8 93 }
rankedss 1:c44001c6bbf8 94 }
rankedss 1:c44001c6bbf8 95
rankedss 1:c44001c6bbf8 96 unsigned elem = 0;
rankedss 1:c44001c6bbf8 97 for (unsigned f = 0; f != kernel_count; f++) {
rankedss 1:c44001c6bbf8 98 for (unsigned j = 0; j != convImageSize; j++) {
rankedss 1:c44001c6bbf8 99 for (unsigned k = 0; k != convImageSize; k++) {
rankedss 1:c44001c6bbf8 100 activated[elem++] = RELU(convImages[f][j][k]);
rankedss 1:c44001c6bbf8 101 }
rankedss 1:c44001c6bbf8 102 }
rankedss 1:c44001c6bbf8 103 }
rankedss 1:c44001c6bbf8 104
rankedss 1:c44001c6bbf8 105 float z[10] = {0.0f};
rankedss 1:c44001c6bbf8 106 for (unsigned i = 0; i != 10; i++) {
rankedss 1:c44001c6bbf8 107 z[i] = 0.0f;
rankedss 1:c44001c6bbf8 108 for (unsigned j = 0; j != kernel_count * convImageSize * convImageSize; j++) {
rankedss 1:c44001c6bbf8 109 z[i] += weights[i][j] * activated[j];
rankedss 1:c44001c6bbf8 110 }
rankedss 1:c44001c6bbf8 111 z[i] += bias_weights[i];
rankedss 1:c44001c6bbf8 112 }
rankedss 1:c44001c6bbf8 113 int ymax = maxIndex(z);
rankedss 1:c44001c6bbf8 114 return ymax;
rankedss 1:c44001c6bbf8 115 }
rankedss 1:c44001c6bbf8 116
rankedss 1:c44001c6bbf8 117 void landscapeInit()
JackB 0:5264c6cecce9 118 {
JackB 0:5264c6cecce9 119 //Configure the display driver
JackB 0:5264c6cecce9 120 TFT.claim(stdout);
rankedss 1:c44001c6bbf8 121 TFT.background(LightGrey);
rankedss 1:c44001c6bbf8 122 TFT.foreground(Green);
JackB 0:5264c6cecce9 123 TFT.set_orientation(LANDSCAPE);
JackB 0:5264c6cecce9 124 TFT.cls();
JackB 0:5264c6cecce9 125
JackB 0:5264c6cecce9 126 //Print a welcome message
rankedss 1:c44001c6bbf8 127 TFT.fillrect(240, 25, 292, 45, Red);
JackB 0:5264c6cecce9 128 TFT.set_font((unsigned char*) Arial12x12);
rankedss 1:c44001c6bbf8 129 TFT.locate(245, 30);
rankedss 1:c44001c6bbf8 130 TFT.background(Red);
rankedss 1:c44001c6bbf8 131 TFT.printf("Guess");
rankedss 1:c44001c6bbf8 132
rankedss 1:c44001c6bbf8 133 //Print a welcome message
rankedss 1:c44001c6bbf8 134 TFT.fillrect(240, 205, 292, 225, Red);
rankedss 1:c44001c6bbf8 135 TFT.set_font((unsigned char*) Arial12x12);
rankedss 1:c44001c6bbf8 136 TFT.locate(245, 210);
rankedss 1:c44001c6bbf8 137 TFT.background(Red);
rankedss 1:c44001c6bbf8 138 TFT.printf("Clear");
rankedss 1:c44001c6bbf8 139
rankedss 1:c44001c6bbf8 140 TFT.fillrect(20, 50, 160, 190, DarkGrey);
rankedss 1:c44001c6bbf8 141 }
rankedss 1:c44001c6bbf8 142
rankedss 1:c44001c6bbf8 143 void portraitInit()
rankedss 1:c44001c6bbf8 144 {
rankedss 1:c44001c6bbf8 145 //Configure the display driver
rankedss 1:c44001c6bbf8 146 TFT.claim(stdout);
rankedss 1:c44001c6bbf8 147 TFT.background(LightGrey);
rankedss 1:c44001c6bbf8 148 TFT.foreground(Green);
rankedss 1:c44001c6bbf8 149 TFT.set_orientation(PORTRAIT);
rankedss 1:c44001c6bbf8 150 TFT.cls();
rankedss 1:c44001c6bbf8 151
rankedss 1:c44001c6bbf8 152 //Print a welcome message
rankedss 1:c44001c6bbf8 153 TFT.fillrect(15, 25, 67, 45, Red);
rankedss 1:c44001c6bbf8 154 TFT.set_font((unsigned char*) Arial12x12);
rankedss 1:c44001c6bbf8 155 TFT.locate(20, 30);
rankedss 1:c44001c6bbf8 156 TFT.background(Red);
rankedss 1:c44001c6bbf8 157 TFT.printf("Guess");
JackB 0:5264c6cecce9 158
rankedss 1:c44001c6bbf8 159 //Print a welcome message
rankedss 1:c44001c6bbf8 160 TFT.fillrect(160, 25, 212, 45, Red);
rankedss 1:c44001c6bbf8 161 TFT.set_font((unsigned char*) Arial12x12);
rankedss 1:c44001c6bbf8 162 TFT.locate(175, 30);
rankedss 1:c44001c6bbf8 163 TFT.background(Red);
rankedss 1:c44001c6bbf8 164 TFT.printf("Clear");
rankedss 1:c44001c6bbf8 165
rankedss 1:c44001c6bbf8 166 TFT.fillrect(50, 160, 190, 300, DarkGrey);
rankedss 1:c44001c6bbf8 167 }
rankedss 1:c44001c6bbf8 168
rankedss 1:c44001c6bbf8 169 int main(void)
rankedss 1:c44001c6bbf8 170 {
rankedss 1:c44001c6bbf8 171 // Get accelerometer data
rankedss 1:c44001c6bbf8 172 float x, y, z;
rankedss 1:c44001c6bbf8 173 x = abs(acc.getAccX());
rankedss 1:c44001c6bbf8 174 y = abs(acc.getAccY());
rankedss 1:c44001c6bbf8 175 z = abs(acc.getAccZ());
rankedss 1:c44001c6bbf8 176 bool horizontal = z < 0.5 ? y > x : true;
rankedss 1:c44001c6bbf8 177 bool currentHorizontal = horizontal;
rankedss 1:c44001c6bbf8 178
rankedss 1:c44001c6bbf8 179 if (currentHorizontal)
rankedss 1:c44001c6bbf8 180 landscapeInit();
rankedss 1:c44001c6bbf8 181 else
rankedss 1:c44001c6bbf8 182 portraitInit();
rankedss 1:c44001c6bbf8 183
rankedss 1:c44001c6bbf8 184
rankedss 1:c44001c6bbf8 185 // Initialize weights
rankedss 1:c44001c6bbf8 186 for (unsigned i = 0; i != 28; i++)
rankedss 1:c44001c6bbf8 187 {
rankedss 1:c44001c6bbf8 188 for (unsigned j = 0; j != 28; j++)
rankedss 1:c44001c6bbf8 189 {
rankedss 1:c44001c6bbf8 190 image[i][j] = -0.5f;
JackB 0:5264c6cecce9 191 }
rankedss 1:c44001c6bbf8 192 }
rankedss 1:c44001c6bbf8 193
JackB 0:5264c6cecce9 194
JackB 0:5264c6cecce9 195
rankedss 1:c44001c6bbf8 196 FT6206.begin();
rankedss 1:c44001c6bbf8 197 while(1)
rankedss 1:c44001c6bbf8 198 {
rankedss 1:c44001c6bbf8 199 for (unsigned int i = 0; i != 1000000; i++) {
rankedss 1:c44001c6bbf8 200 if (i == 0) {
rankedss 1:c44001c6bbf8 201 // Get accelerometer data
rankedss 1:c44001c6bbf8 202 float x, y, z;
rankedss 1:c44001c6bbf8 203
rankedss 1:c44001c6bbf8 204 x = abs(acc.getAccX());
rankedss 1:c44001c6bbf8 205 y = abs(acc.getAccY());
rankedss 1:c44001c6bbf8 206 z = abs(acc.getAccZ());
rankedss 1:c44001c6bbf8 207
rankedss 1:c44001c6bbf8 208 horizontal = z < 0.5 ? y > x : horizontal;
rankedss 1:c44001c6bbf8 209 }
rankedss 1:c44001c6bbf8 210
rankedss 1:c44001c6bbf8 211 if (currentHorizontal != horizontal)
rankedss 1:c44001c6bbf8 212 {
rankedss 1:c44001c6bbf8 213 currentHorizontal = horizontal;
rankedss 1:c44001c6bbf8 214 if (currentHorizontal)
rankedss 1:c44001c6bbf8 215 landscapeInit();
rankedss 1:c44001c6bbf8 216 else
rankedss 1:c44001c6bbf8 217 portraitInit();
rankedss 1:c44001c6bbf8 218 }
rankedss 1:c44001c6bbf8 219
rankedss 1:c44001c6bbf8 220
rankedss 1:c44001c6bbf8 221 if (FT6206.dataReceived())
rankedss 1:c44001c6bbf8 222 {
rankedss 1:c44001c6bbf8 223 TS_Point p = FT6206.getPoint();
rankedss 1:c44001c6bbf8 224
rankedss 1:c44001c6bbf8 225
rankedss 1:c44001c6bbf8 226 if (horizontal) {
rankedss 1:c44001c6bbf8 227
rankedss 1:c44001c6bbf8 228 if (p.x >= 25 and p.x <= 155 and p.y >= 55 and p.y <= 185)
rankedss 1:c44001c6bbf8 229 {
rankedss 1:c44001c6bbf8 230 // Handwriting panel has been pressed
rankedss 1:c44001c6bbf8 231 TFT.fillcircle(p.x, p.y, 4, Yellow);
rankedss 1:c44001c6bbf8 232 int image_y = (p.x-20)/5;
rankedss 1:c44001c6bbf8 233 int image_x = (p.y-50)/5;
rankedss 1:c44001c6bbf8 234 if (image_x > 0 and image_y > 0)
rankedss 1:c44001c6bbf8 235 {
rankedss 1:c44001c6bbf8 236 image[image_x-1][image_y-1] = 0.5f;
rankedss 1:c44001c6bbf8 237 image[image_x-1][image_y] = 0.5f;
rankedss 1:c44001c6bbf8 238 image[image_x-1][image_y+1] = 0.5f;
rankedss 1:c44001c6bbf8 239 image[image_x][image_y-1] = 0.5f;
rankedss 1:c44001c6bbf8 240 image[image_x][image_y] = 0.5f;
rankedss 1:c44001c6bbf8 241 image[image_x][image_y+1] = 0.5f;
rankedss 1:c44001c6bbf8 242 image[image_x+1][image_y-1] = 0.5f;
rankedss 1:c44001c6bbf8 243 image[image_x+1][image_y] = 0.5f;
rankedss 1:c44001c6bbf8 244 image[image_x+1][image_y+1] = 0.5f;
rankedss 1:c44001c6bbf8 245 }
rankedss 1:c44001c6bbf8 246 }
rankedss 1:c44001c6bbf8 247 else if (p.y >= 0 and p.y <= 60 and p.x >= 200 and p.x <= 320)
rankedss 1:c44001c6bbf8 248 {
rankedss 1:c44001c6bbf8 249 // Guess button has been pressed
rankedss 1:c44001c6bbf8 250 TFT.fillrect(180, 50, 320, 190, LightGrey);
rankedss 1:c44001c6bbf8 251 char prediction = FeedForward();
rankedss 1:c44001c6bbf8 252 TFT.locate(270, 110);
rankedss 1:c44001c6bbf8 253 TFT.background(LightGrey);
rankedss 1:c44001c6bbf8 254 TFT.foreground(Green);
rankedss 1:c44001c6bbf8 255
rankedss 1:c44001c6bbf8 256 TFT.set_font((unsigned char*) Arial28x28);
rankedss 1:c44001c6bbf8 257 switch (prediction)
rankedss 1:c44001c6bbf8 258 {
rankedss 1:c44001c6bbf8 259 case 0: TFT.printf("0"); break;
rankedss 1:c44001c6bbf8 260 case 1: TFT.printf("1"); break;
rankedss 1:c44001c6bbf8 261 case 2: TFT.printf("2"); break;
rankedss 1:c44001c6bbf8 262 case 3: TFT.printf("3"); break;
rankedss 1:c44001c6bbf8 263 case 4: TFT.printf("4"); break;
rankedss 1:c44001c6bbf8 264 case 5: TFT.printf("5"); break;
rankedss 1:c44001c6bbf8 265 case 6: TFT.printf("6"); break;
rankedss 1:c44001c6bbf8 266 case 7: TFT.printf("7"); break;
rankedss 1:c44001c6bbf8 267 case 8: TFT.printf("8"); break;
rankedss 1:c44001c6bbf8 268 case 9: TFT.printf("9"); break;
rankedss 1:c44001c6bbf8 269 default: TFT.printf("noidea\n");
rankedss 1:c44001c6bbf8 270 }
rankedss 1:c44001c6bbf8 271 }
rankedss 1:c44001c6bbf8 272 else if (p.y >= 185 and p.y <= 240 and p.x >= 220 and p.x <= 320)
rankedss 1:c44001c6bbf8 273 {
rankedss 1:c44001c6bbf8 274 // Clear button has been pressed
rankedss 1:c44001c6bbf8 275 TFT.fillrect(15, 45, 165, 195, LightGrey);
rankedss 1:c44001c6bbf8 276 TFT.fillrect(20, 50, 160, 190, DarkGrey);
rankedss 1:c44001c6bbf8 277 for (unsigned i = 0; i != 28; i++)
rankedss 1:c44001c6bbf8 278 {
rankedss 1:c44001c6bbf8 279 for (unsigned j = 0; j != 28; j++)
rankedss 1:c44001c6bbf8 280 {
rankedss 1:c44001c6bbf8 281 image[i][j] = -0.5f;
rankedss 1:c44001c6bbf8 282 }
rankedss 1:c44001c6bbf8 283 }
rankedss 1:c44001c6bbf8 284 }
rankedss 1:c44001c6bbf8 285 //horizantal end
rankedss 1:c44001c6bbf8 286 }
rankedss 1:c44001c6bbf8 287 else
rankedss 1:c44001c6bbf8 288 {
rankedss 1:c44001c6bbf8 289 if (p.x >= 160 and p.x <= 300 and p.y >= 50 and p.y <= 190)
rankedss 1:c44001c6bbf8 290 {
rankedss 1:c44001c6bbf8 291 // Handwriting panel has been pressed
rankedss 1:c44001c6bbf8 292 TFT.fillcircle(240-p.y, p.x, 4, Yellow);
rankedss 1:c44001c6bbf8 293 int image_x = (p.x-160)/5;
rankedss 1:c44001c6bbf8 294 int image_y = (240- p.y-50)/5;
rankedss 1:c44001c6bbf8 295 if (image_x > 0 and image_y > 0)
rankedss 1:c44001c6bbf8 296 {
rankedss 1:c44001c6bbf8 297 image[image_x-1][image_y-1] = 0.5f;
rankedss 1:c44001c6bbf8 298 image[image_x-1][image_y] = 0.5f;
rankedss 1:c44001c6bbf8 299 image[image_x-1][image_y+1] = 0.5f;
rankedss 1:c44001c6bbf8 300 image[image_x][image_y-1] = 0.5f;
rankedss 1:c44001c6bbf8 301 image[image_x][image_y] = 0.5f;
rankedss 1:c44001c6bbf8 302 image[image_x][image_y+1] = 0.5f;
rankedss 1:c44001c6bbf8 303 image[image_x+1][image_y-1] = 0.5f;
rankedss 1:c44001c6bbf8 304 image[image_x+1][image_y] = 0.5f;
rankedss 1:c44001c6bbf8 305 image[image_x+1][image_y+1] = 0.5f;
rankedss 1:c44001c6bbf8 306 }
rankedss 1:c44001c6bbf8 307 }
rankedss 1:c44001c6bbf8 308 else if (p.y >= 140 and p.y <= 240 and p.x >= 1 and p.x <= 70)
rankedss 1:c44001c6bbf8 309 {
rankedss 1:c44001c6bbf8 310 // Guess button has been pressed
rankedss 1:c44001c6bbf8 311 TFT.fillrect(90, 0, 140, 60, LightGrey);
rankedss 1:c44001c6bbf8 312 char prediction = FeedForward();
rankedss 1:c44001c6bbf8 313 TFT.locate(110, 30);
rankedss 1:c44001c6bbf8 314 TFT.background(LightGrey);
rankedss 1:c44001c6bbf8 315 TFT.foreground(Green);
rankedss 1:c44001c6bbf8 316
rankedss 1:c44001c6bbf8 317 TFT.set_font((unsigned char*) Arial28x28);
rankedss 1:c44001c6bbf8 318 switch (prediction)
rankedss 1:c44001c6bbf8 319 {
rankedss 1:c44001c6bbf8 320 case 0: TFT.printf("0"); break;
rankedss 1:c44001c6bbf8 321 case 1: TFT.printf("1"); break;
rankedss 1:c44001c6bbf8 322 case 2: TFT.printf("2"); break;
rankedss 1:c44001c6bbf8 323 case 3: TFT.printf("3"); break;
rankedss 1:c44001c6bbf8 324 case 4: TFT.printf("4"); break;
rankedss 1:c44001c6bbf8 325 case 5: TFT.printf("5"); break;
rankedss 1:c44001c6bbf8 326 case 6: TFT.printf("6"); break;
rankedss 1:c44001c6bbf8 327 case 7: TFT.printf("7"); break;
rankedss 1:c44001c6bbf8 328 case 8: TFT.printf("8"); break;
rankedss 1:c44001c6bbf8 329 case 9: TFT.printf("9"); break;
rankedss 1:c44001c6bbf8 330 default: TFT.printf("noidea\n");
rankedss 1:c44001c6bbf8 331 }
rankedss 1:c44001c6bbf8 332 }
rankedss 1:c44001c6bbf8 333 else if (p.y >= 1 and p.y <= 80 and p.x >= 0 and p.x <= 70)
rankedss 1:c44001c6bbf8 334 {
rankedss 1:c44001c6bbf8 335 // Clear button has been pressed
rankedss 1:c44001c6bbf8 336 TFT.fillrect(45, 155, 195, 305, LightGrey);
rankedss 1:c44001c6bbf8 337 TFT.fillrect(50, 160, 190, 300, DarkGrey);
rankedss 1:c44001c6bbf8 338 for (unsigned i = 0; i != 28; i++)
rankedss 1:c44001c6bbf8 339 {
rankedss 1:c44001c6bbf8 340 for (unsigned j = 0; j != 28; j++)
rankedss 1:c44001c6bbf8 341 {
rankedss 1:c44001c6bbf8 342 image[i][j] = -0.5f;
rankedss 1:c44001c6bbf8 343 }
rankedss 1:c44001c6bbf8 344 }
rankedss 1:c44001c6bbf8 345 }
rankedss 1:c44001c6bbf8 346
rankedss 1:c44001c6bbf8 347 // portrait end
rankedss 1:c44001c6bbf8 348 }
rankedss 1:c44001c6bbf8 349
rankedss 1:c44001c6bbf8 350
rankedss 1:c44001c6bbf8 351
rankedss 1:c44001c6bbf8 352 }
rankedss 1:c44001c6bbf8 353 }
JackB 0:5264c6cecce9 354 }
JackB 0:5264c6cecce9 355 }