Game: Touch twice on the keypad with a circle to make it disappear, and touch once on the keypad with a filed circle to make it disappera. When all the circles disappear, then the screen displays:"You win!! Reset the game." And a new pattern shows on the uLCD.

Dependencies:   4DGL-uLCD-SE mbed

Fork of TouchPuzzle_full by Joe Sobchuk

Committer:
ZhiFeng
Date:
Thu Mar 12 18:08:10 2015 +0000
Revision:
2:c2ec8aa8b53e
Parent:
1:288da1e5d10b
ECE 4180 Mini project by Zhongtao Yang and Zhi Feng

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:e09703934ff4 1 /*
ZhiFeng 2:c2ec8aa8b53e 2 Zhi Feng and Zhongtao Yang 3/12/2015
ZhiFeng 2:c2ec8aa8b53e 3 fallInterrupt() and API for mpr121 written by Anthony Buckton in 2011
ZhiFeng 2:c2ec8aa8b53e 4
ZhiFeng 2:c2ec8aa8b53e 5 Wire Connection:
ZhiFeng 2:c2ec8aa8b53e 6
ZhiFeng 2:c2ec8aa8b53e 7 uLCD:
ZhiFeng 2:c2ec8aa8b53e 8 5V---Vcc
ZhiFeng 2:c2ec8aa8b53e 9 GND---GND
ZhiFeng 2:c2ec8aa8b53e 10 RX---P28
ZhiFeng 2:c2ec8aa8b53e 11 TX---P27
ZhiFeng 2:c2ec8aa8b53e 12 RESET---P29
4180_1 0:e09703934ff4 13
ZhiFeng 2:c2ec8aa8b53e 14 touch keypad:
ZhiFeng 2:c2ec8aa8b53e 15 Vcc---Vcc
ZhiFeng 2:c2ec8aa8b53e 16 SDA-P10
ZhiFeng 2:c2ec8aa8b53e 17 SCL---P9
ZhiFeng 2:c2ec8aa8b53e 18 IRQ---P26
ZhiFeng 2:c2ec8aa8b53e 19 Vcc---Vcc
ZhiFeng 2:c2ec8aa8b53e 20
ZhiFeng 2:c2ec8aa8b53e 21 Add two 4.7k pullup resistors for the SDA and SCL lines.
ZhiFeng 2:c2ec8aa8b53e 22
ZhiFeng 2:c2ec8aa8b53e 23 Game:
ZhiFeng 2:c2ec8aa8b53e 24 Touch twice on the keypad with a circle to make it disappear, and touch once on the keypad with a filed circle to
ZhiFeng 2:c2ec8aa8b53e 25 make it disappera. When all the circles disappear, then the screen displays:"You win!! Reset the game." And a new
ZhiFeng 2:c2ec8aa8b53e 26 pattern shows on the uLCD.
ZhiFeng 2:c2ec8aa8b53e 27
ZhiFeng 2:c2ec8aa8b53e 28
4180_1 0:e09703934ff4 29 */
4180_1 0:e09703934ff4 30
4180_1 0:e09703934ff4 31 #include <mbed.h>
jsobchuk3 1:288da1e5d10b 32 #include <mpr121.h> // Thanks to Anthony Buckton
jsobchuk3 1:288da1e5d10b 33 #include "uLCD_4DGL.h"
jsobchuk3 1:288da1e5d10b 34
jsobchuk3 1:288da1e5d10b 35 uLCD_4DGL uLCD(p28,p27,p29);
4180_1 0:e09703934ff4 36
4180_1 0:e09703934ff4 37 // Create the interrupt receiver object on pin 26
4180_1 0:e09703934ff4 38 InterruptIn interrupt(p26);
4180_1 0:e09703934ff4 39
jsobchuk3 1:288da1e5d10b 40 // Setup the i2c bus on pins 9 and 10
4180_1 0:e09703934ff4 41 I2C i2c(p9, p10);
4180_1 0:e09703934ff4 42
4180_1 0:e09703934ff4 43 // Setup the Mpr121:
4180_1 0:e09703934ff4 44 // constructor(i2c object, i2c address of the mpr121)
4180_1 0:e09703934ff4 45 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
4180_1 0:e09703934ff4 46
jsobchuk3 1:288da1e5d10b 47 int on [9] = {0,0,0,0,0,0,0,0,0};
jsobchuk3 1:288da1e5d10b 48 int key;
jsobchuk3 1:288da1e5d10b 49 int radius = 15;
jsobchuk3 1:288da1e5d10b 50 int initpos = 23; // Initial x and y shift from the edge of the display
jsobchuk3 1:288da1e5d10b 51 int shift = 40; // Space in between each circle
4180_1 0:e09703934ff4 52
jsobchuk3 1:288da1e5d10b 53 // Function to invert any specified circle
jsobchuk3 1:288da1e5d10b 54 void invert(int on [9], int circleN) {
jsobchuk3 1:288da1e5d10b 55 switch (circleN) {
jsobchuk3 1:288da1e5d10b 56
jsobchuk3 1:288da1e5d10b 57 case 1:
jsobchuk3 1:288da1e5d10b 58 if (on[0] == 0) { // If circle 1 is off then Fill 1st Circle
ZhiFeng 2:c2ec8aa8b53e 59 uLCD.filled_circle(initpos, initpos, radius, BLACK); // Fill 1st Circle
jsobchuk3 1:288da1e5d10b 60 on[0] = 1; // Then change status of circle 1 to on
4180_1 0:e09703934ff4 61 }
jsobchuk3 1:288da1e5d10b 62 else if (on[0] == 1) { // If circle 1 is on then erase 1st circle
ZhiFeng 2:c2ec8aa8b53e 63 uLCD.filled_circle(initpos, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 64 uLCD.circle(initpos, initpos, radius, BLACK); // Erase 1st Circle
jsobchuk3 1:288da1e5d10b 65 on[0] = 0;
jsobchuk3 1:288da1e5d10b 66 }
jsobchuk3 1:288da1e5d10b 67 break;
jsobchuk3 1:288da1e5d10b 68
jsobchuk3 1:288da1e5d10b 69 case 2:
jsobchuk3 1:288da1e5d10b 70 if (on[1] == 0) {
ZhiFeng 2:c2ec8aa8b53e 71 uLCD.filled_circle(initpos + shift, initpos, radius, BLACK); // Fill 2nd Circle
jsobchuk3 1:288da1e5d10b 72 on[1] = 1;
jsobchuk3 1:288da1e5d10b 73 }
jsobchuk3 1:288da1e5d10b 74
jsobchuk3 1:288da1e5d10b 75 else if (on[1] == 1) {
ZhiFeng 2:c2ec8aa8b53e 76 uLCD.filled_circle(initpos + shift, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 77 uLCD.circle(initpos + shift, initpos, radius, WHITE); // Erase 2nd Circle
jsobchuk3 1:288da1e5d10b 78 on[1] = 0;
jsobchuk3 1:288da1e5d10b 79 }
jsobchuk3 1:288da1e5d10b 80 break;
jsobchuk3 1:288da1e5d10b 81
jsobchuk3 1:288da1e5d10b 82
jsobchuk3 1:288da1e5d10b 83 case 3:
jsobchuk3 1:288da1e5d10b 84 if (on[2] == 0) {
ZhiFeng 2:c2ec8aa8b53e 85 uLCD.filled_circle(initpos + 2*shift, initpos, radius, BLACK);
jsobchuk3 1:288da1e5d10b 86 on[2] = 1;
jsobchuk3 1:288da1e5d10b 87 }
jsobchuk3 1:288da1e5d10b 88 else if (on[2] == 1) {
ZhiFeng 2:c2ec8aa8b53e 89 uLCD.filled_circle(initpos + 2*shift, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 90 uLCD.circle(initpos + 2*shift, initpos, radius, BLACK);
jsobchuk3 1:288da1e5d10b 91 on[2] = 0;
jsobchuk3 1:288da1e5d10b 92 }
jsobchuk3 1:288da1e5d10b 93 break;
jsobchuk3 1:288da1e5d10b 94
jsobchuk3 1:288da1e5d10b 95
jsobchuk3 1:288da1e5d10b 96 case 4:
jsobchuk3 1:288da1e5d10b 97 if (on[3] == 0) {
ZhiFeng 2:c2ec8aa8b53e 98 uLCD.filled_circle(initpos, initpos + shift, radius, BLACK); // Fill 4th Circle
jsobchuk3 1:288da1e5d10b 99 on[3] = 1;
jsobchuk3 1:288da1e5d10b 100 }
jsobchuk3 1:288da1e5d10b 101
jsobchuk3 1:288da1e5d10b 102 else if (on[3] == 1) {
ZhiFeng 2:c2ec8aa8b53e 103 uLCD.filled_circle(initpos, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 104 uLCD.circle(initpos, initpos + shift, radius, BLACK); // Erase 4th Circle
jsobchuk3 1:288da1e5d10b 105 on[3] = 0;
jsobchuk3 1:288da1e5d10b 106 }
jsobchuk3 1:288da1e5d10b 107 break;
jsobchuk3 1:288da1e5d10b 108
jsobchuk3 1:288da1e5d10b 109 case 5:
jsobchuk3 1:288da1e5d10b 110 if (on[4] == 0) {
ZhiFeng 2:c2ec8aa8b53e 111 uLCD.filled_circle(initpos + shift, initpos + shift, radius, BLACK); // Fill 5th Circle
jsobchuk3 1:288da1e5d10b 112 on[4] = 1;
jsobchuk3 1:288da1e5d10b 113 }
jsobchuk3 1:288da1e5d10b 114
jsobchuk3 1:288da1e5d10b 115 else if (on[4] == 1) {
ZhiFeng 2:c2ec8aa8b53e 116 uLCD.filled_circle(initpos + shift, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 117 uLCD.circle(initpos + shift, initpos + shift, radius, BLACK); // Erase 5th Circle
jsobchuk3 1:288da1e5d10b 118 on[4] = 0;
jsobchuk3 1:288da1e5d10b 119 }
jsobchuk3 1:288da1e5d10b 120 break;
jsobchuk3 1:288da1e5d10b 121
jsobchuk3 1:288da1e5d10b 122 case 6:
jsobchuk3 1:288da1e5d10b 123 if (on[5] == 0) {
ZhiFeng 2:c2ec8aa8b53e 124 uLCD.filled_circle(initpos + 2*shift, initpos + shift, radius, BLACK); // Fill 6th Circle
jsobchuk3 1:288da1e5d10b 125 on[5] = 1;
jsobchuk3 1:288da1e5d10b 126 }
jsobchuk3 1:288da1e5d10b 127
jsobchuk3 1:288da1e5d10b 128 else if (on[5] == 1) {
ZhiFeng 2:c2ec8aa8b53e 129 uLCD.filled_circle(initpos + 2*shift, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 130 uLCD.circle(initpos + 2*shift, initpos + shift, radius, BLACK); // Erase 6th Circle
jsobchuk3 1:288da1e5d10b 131 on[5] = 0;
jsobchuk3 1:288da1e5d10b 132 }
jsobchuk3 1:288da1e5d10b 133 break;
jsobchuk3 1:288da1e5d10b 134
jsobchuk3 1:288da1e5d10b 135
jsobchuk3 1:288da1e5d10b 136
jsobchuk3 1:288da1e5d10b 137 case 7:
jsobchuk3 1:288da1e5d10b 138 if (on[6] == 0) {
ZhiFeng 2:c2ec8aa8b53e 139 uLCD.filled_circle(initpos, initpos + 2*shift, radius, BLACK); // Fill 7th Circle
jsobchuk3 1:288da1e5d10b 140 on[6] = 1;
jsobchuk3 1:288da1e5d10b 141 }
jsobchuk3 1:288da1e5d10b 142
jsobchuk3 1:288da1e5d10b 143 else if (on[6] == 1) {
ZhiFeng 2:c2ec8aa8b53e 144 uLCD.filled_circle(initpos, initpos + 2*shift, radius, WHITE); // Erase 7th Circle
ZhiFeng 2:c2ec8aa8b53e 145 uLCD.circle(initpos, initpos + 2*shift, radius, BLACK);
jsobchuk3 1:288da1e5d10b 146 on[6] = 0;
jsobchuk3 1:288da1e5d10b 147 }
jsobchuk3 1:288da1e5d10b 148 break;
jsobchuk3 1:288da1e5d10b 149
jsobchuk3 1:288da1e5d10b 150
jsobchuk3 1:288da1e5d10b 151
jsobchuk3 1:288da1e5d10b 152 case 8:
jsobchuk3 1:288da1e5d10b 153 if (on[7] == 0) {
ZhiFeng 2:c2ec8aa8b53e 154 uLCD.filled_circle(initpos + shift, initpos + 2*shift, radius, BLACK); // Fill 8th Circle
jsobchuk3 1:288da1e5d10b 155 on[7] = 1;
jsobchuk3 1:288da1e5d10b 156 }
jsobchuk3 1:288da1e5d10b 157
jsobchuk3 1:288da1e5d10b 158 else if (on[7] == 1) {
ZhiFeng 2:c2ec8aa8b53e 159 uLCD.filled_circle(initpos + shift, initpos + 2*shift, radius, WHITE); // Erase 8th Circle
ZhiFeng 2:c2ec8aa8b53e 160 uLCD.circle(initpos + shift, initpos + 2*shift, radius, BLACK);
jsobchuk3 1:288da1e5d10b 161 on[7] = 0;
jsobchuk3 1:288da1e5d10b 162 }
jsobchuk3 1:288da1e5d10b 163 break;
jsobchuk3 1:288da1e5d10b 164
jsobchuk3 1:288da1e5d10b 165
jsobchuk3 1:288da1e5d10b 166
jsobchuk3 1:288da1e5d10b 167 case 9:
jsobchuk3 1:288da1e5d10b 168 if (on[8] == 0) {
ZhiFeng 2:c2ec8aa8b53e 169 uLCD.filled_circle(initpos + 2*shift, initpos + 2*shift, radius, BLACK); // Fill 9th Circle
jsobchuk3 1:288da1e5d10b 170 on[8] = 1;
jsobchuk3 1:288da1e5d10b 171 }
jsobchuk3 1:288da1e5d10b 172
jsobchuk3 1:288da1e5d10b 173 else if (on[8] == 1) {
ZhiFeng 2:c2ec8aa8b53e 174 uLCD.filled_circle(initpos + 2*shift, initpos + 2*shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 175 uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, BLACK); // Erase 9th Circle
jsobchuk3 1:288da1e5d10b 176 on[8] = 0;
jsobchuk3 1:288da1e5d10b 177 }
jsobchuk3 1:288da1e5d10b 178 break;
jsobchuk3 1:288da1e5d10b 179
jsobchuk3 1:288da1e5d10b 180
jsobchuk3 1:288da1e5d10b 181 }
jsobchuk3 1:288da1e5d10b 182 }
4180_1 0:e09703934ff4 183
jsobchuk3 1:288da1e5d10b 184 void pushButton(int on [9],int key_code) {
jsobchuk3 1:288da1e5d10b 185 // The winning combination of buttons is 0,2,4,8 (1,3,5,9 in key_codes)
jsobchuk3 1:288da1e5d10b 186 // The rest of the buttons are programmed to give bogus combinations to confuse the player, but one of them might coincidently win the game.
jsobchuk3 1:288da1e5d10b 187 switch (key_code) {
jsobchuk3 1:288da1e5d10b 188
jsobchuk3 1:288da1e5d10b 189 case 2:
ZhiFeng 2:c2ec8aa8b53e 190 invert(on,3);
jsobchuk3 1:288da1e5d10b 191 break;
jsobchuk3 1:288da1e5d10b 192
jsobchuk3 1:288da1e5d10b 193 case 3:
ZhiFeng 2:c2ec8aa8b53e 194 invert(on,6);
jsobchuk3 1:288da1e5d10b 195 break;
jsobchuk3 1:288da1e5d10b 196
jsobchuk3 1:288da1e5d10b 197 case 4:
ZhiFeng 2:c2ec8aa8b53e 198 invert(on,9);
jsobchuk3 1:288da1e5d10b 199 break;
jsobchuk3 1:288da1e5d10b 200
jsobchuk3 1:288da1e5d10b 201 case 6:
ZhiFeng 2:c2ec8aa8b53e 202 invert(on,2);
jsobchuk3 1:288da1e5d10b 203 break;
jsobchuk3 1:288da1e5d10b 204
jsobchuk3 1:288da1e5d10b 205 case 7:
jsobchuk3 1:288da1e5d10b 206 invert(on,5);
jsobchuk3 1:288da1e5d10b 207 break;
jsobchuk3 1:288da1e5d10b 208
jsobchuk3 1:288da1e5d10b 209 case 8:
ZhiFeng 2:c2ec8aa8b53e 210 invert(on,8);
jsobchuk3 1:288da1e5d10b 211 break;
jsobchuk3 1:288da1e5d10b 212
jsobchuk3 1:288da1e5d10b 213 case 10:
ZhiFeng 2:c2ec8aa8b53e 214 invert(on,1);
jsobchuk3 1:288da1e5d10b 215 break;
jsobchuk3 1:288da1e5d10b 216
jsobchuk3 1:288da1e5d10b 217 case 11:
ZhiFeng 2:c2ec8aa8b53e 218 invert(on,4);
jsobchuk3 1:288da1e5d10b 219 break;
jsobchuk3 1:288da1e5d10b 220
jsobchuk3 1:288da1e5d10b 221 case 12:
ZhiFeng 2:c2ec8aa8b53e 222 invert(on,7);
jsobchuk3 1:288da1e5d10b 223 break;
jsobchuk3 1:288da1e5d10b 224 }
4180_1 0:e09703934ff4 225 }
4180_1 0:e09703934ff4 226
4180_1 0:e09703934ff4 227
4180_1 0:e09703934ff4 228
jsobchuk3 1:288da1e5d10b 229
jsobchuk3 1:288da1e5d10b 230
jsobchuk3 1:288da1e5d10b 231 // Key hit/release interrupt routine thanks to Anthony Buckton
jsobchuk3 1:288da1e5d10b 232 void fallInterrupt() {
jsobchuk3 1:288da1e5d10b 233 int key_code = 0;
jsobchuk3 1:288da1e5d10b 234 int i = 0;
jsobchuk3 1:288da1e5d10b 235 int value = mpr121.read(0x00);
jsobchuk3 1:288da1e5d10b 236 value += mpr121.read(0x01) << 8;
jsobchuk3 1:288da1e5d10b 237 // LED demo mod
jsobchuk3 1:288da1e5d10b 238 i = 0;
jsobchuk3 1:288da1e5d10b 239 // puts key number out to LEDs for demo
jsobchuk3 1:288da1e5d10b 240 for (i=0; i<12; i++) {
jsobchuk3 1:288da1e5d10b 241 if (((value>>i)&0x01)==1) {
jsobchuk3 1:288da1e5d10b 242 key_code=i+1;
jsobchuk3 1:288da1e5d10b 243 }
jsobchuk3 1:288da1e5d10b 244 }
jsobchuk3 1:288da1e5d10b 245 key = key_code;
jsobchuk3 1:288da1e5d10b 246 }
jsobchuk3 1:288da1e5d10b 247
jsobchuk3 1:288da1e5d10b 248
jsobchuk3 1:288da1e5d10b 249
jsobchuk3 1:288da1e5d10b 250 int main() {
jsobchuk3 1:288da1e5d10b 251 int j;
jsobchuk3 1:288da1e5d10b 252 uLCD.rectangle(0,0,127,127,WHITE); // Draw border
jsobchuk3 1:288da1e5d10b 253 // Draw empty circles in correct positions
ZhiFeng 2:c2ec8aa8b53e 254 uLCD.circle(initpos, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 255 uLCD.circle(initpos + shift, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 256 uLCD.circle(initpos + 2*shift, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 257 uLCD.circle(initpos, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 258 uLCD.circle(initpos + shift, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 259 uLCD.circle(initpos + 2*shift, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 260 uLCD.circle(initpos, initpos + 2*shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 261 uLCD.circle(initpos + shift, initpos + 2*shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 262 uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, WHITE);
jsobchuk3 1:288da1e5d10b 263
jsobchuk3 1:288da1e5d10b 264 interrupt.fall(&fallInterrupt);
jsobchuk3 1:288da1e5d10b 265 interrupt.mode(PullUp);
jsobchuk3 1:288da1e5d10b 266 while (1) {
jsobchuk3 1:288da1e5d10b 267 // Call pushButton once button is pressed by passing the key of the button pushed and the status of the circles
jsobchuk3 1:288da1e5d10b 268 if(key != 0) {
jsobchuk3 1:288da1e5d10b 269 pushButton(on, key);
jsobchuk3 1:288da1e5d10b 270 if(key != 1)key = 0;
jsobchuk3 1:288da1e5d10b 271 }
jsobchuk3 1:288da1e5d10b 272 // If all circles are filled, then print You win!!! Reset the mbed
jsobchuk3 1:288da1e5d10b 273 if (key == 1 || (on[0] && on[1] && on[2] && on[3] && on[4] && on[5] && on[6] && on[7] && on[8])) {
jsobchuk3 1:288da1e5d10b 274 uLCD.locate(5,5);
jsobchuk3 1:288da1e5d10b 275 if(key != 1) uLCD.printf("You Win!!!");
jsobchuk3 1:288da1e5d10b 276 uLCD.locate(0,7);
jsobchuk3 1:288da1e5d10b 277 uLCD.printf("Resetting the game");
jsobchuk3 1:288da1e5d10b 278 wait(3);
jsobchuk3 1:288da1e5d10b 279
jsobchuk3 1:288da1e5d10b 280 for (j = 0; j < 9; j++) {
jsobchuk3 1:288da1e5d10b 281 on[j] = rand() % 2;
jsobchuk3 1:288da1e5d10b 282 }
jsobchuk3 1:288da1e5d10b 283 uLCD.filled_rectangle(0,0,127,127,BLACK);// Erase Everything
jsobchuk3 1:288da1e5d10b 284
jsobchuk3 1:288da1e5d10b 285 uLCD.rectangle(0,0,127,127,WHITE); // Draw border
jsobchuk3 1:288da1e5d10b 286
jsobchuk3 1:288da1e5d10b 287
jsobchuk3 1:288da1e5d10b 288 // Draw empty circles in correct positions
ZhiFeng 2:c2ec8aa8b53e 289 uLCD.circle(initpos, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 290 uLCD.circle(initpos + shift, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 291 uLCD.circle(initpos + 2*shift, initpos, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 292 uLCD.circle(initpos, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 293 uLCD.circle(initpos + shift, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 294 uLCD.circle(initpos + 2*shift, initpos + shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 295 uLCD.circle(initpos, initpos + 2*shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 296 uLCD.circle(initpos + shift, initpos + 2*shift, radius, WHITE);
ZhiFeng 2:c2ec8aa8b53e 297 uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, WHITE);
jsobchuk3 1:288da1e5d10b 298
jsobchuk3 1:288da1e5d10b 299 //Make sure they match the array
jsobchuk3 1:288da1e5d10b 300 for(j = 0; j < 9; j++) {
jsobchuk3 1:288da1e5d10b 301 invert(on,j);
jsobchuk3 1:288da1e5d10b 302 }
jsobchuk3 1:288da1e5d10b 303
jsobchuk3 1:288da1e5d10b 304 }
jsobchuk3 1:288da1e5d10b 305 //wait(0.2); // Used wait to eliminate multiple presses of button. <- Done somewhere else
jsobchuk3 1:288da1e5d10b 306 }
jsobchuk3 1:288da1e5d10b 307 }