Sudoku Game using the LCD, joystick, number pad, and speaker.

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player_copy

Fork of rtos_basic by mbed official

Committer:
decfrv
Date:
Thu Nov 03 14:45:00 2016 +0000
Revision:
7:a935e2f5ebd0
Parent:
3:c92e21f305d8
Sudoku Game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
decfrv 7:a935e2f5ebd0 2 #include <mpr121.h>
emilmont 1:491820ee784d 3 #include "rtos.h"
decfrv 7:a935e2f5ebd0 4 #include "uLCD_4DGL.h"
decfrv 7:a935e2f5ebd0 5 #include "wave_player.h"
decfrv 7:a935e2f5ebd0 6 #include "SDFileSystem.h"
decfrv 7:a935e2f5ebd0 7
decfrv 7:a935e2f5ebd0 8 class Nav_Switch
decfrv 7:a935e2f5ebd0 9 {
decfrv 7:a935e2f5ebd0 10 public:
decfrv 7:a935e2f5ebd0 11 Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire);
decfrv 7:a935e2f5ebd0 12 int read();
decfrv 7:a935e2f5ebd0 13 //boolean functions to test each switch
decfrv 7:a935e2f5ebd0 14 bool up();
decfrv 7:a935e2f5ebd0 15 bool down();
decfrv 7:a935e2f5ebd0 16 bool left();
decfrv 7:a935e2f5ebd0 17 bool right();
decfrv 7:a935e2f5ebd0 18 bool fire();
decfrv 7:a935e2f5ebd0 19 //automatic read on RHS
decfrv 7:a935e2f5ebd0 20 operator int ();
decfrv 7:a935e2f5ebd0 21 //index to any switch array style
decfrv 7:a935e2f5ebd0 22 bool operator[](int index) {
decfrv 7:a935e2f5ebd0 23 return _pins[index];
decfrv 7:a935e2f5ebd0 24 };
decfrv 7:a935e2f5ebd0 25 private:
decfrv 7:a935e2f5ebd0 26 BusIn _pins;
decfrv 7:a935e2f5ebd0 27
decfrv 7:a935e2f5ebd0 28 };
decfrv 7:a935e2f5ebd0 29 Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire):
decfrv 7:a935e2f5ebd0 30 _pins(up, down, left, right, fire)
decfrv 7:a935e2f5ebd0 31 {
decfrv 7:a935e2f5ebd0 32 _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
decfrv 7:a935e2f5ebd0 33 wait(0.001); //delays just a bit for pullups to pull inputs high
decfrv 7:a935e2f5ebd0 34 }
decfrv 7:a935e2f5ebd0 35 inline bool Nav_Switch::up()
decfrv 7:a935e2f5ebd0 36 {
decfrv 7:a935e2f5ebd0 37 return !(_pins[0]);
decfrv 7:a935e2f5ebd0 38 }
decfrv 7:a935e2f5ebd0 39 inline bool Nav_Switch::down()
decfrv 7:a935e2f5ebd0 40 {
decfrv 7:a935e2f5ebd0 41 return !(_pins[1]);
decfrv 7:a935e2f5ebd0 42 }
decfrv 7:a935e2f5ebd0 43 inline bool Nav_Switch::left()
decfrv 7:a935e2f5ebd0 44 {
decfrv 7:a935e2f5ebd0 45 return !(_pins[2]);
decfrv 7:a935e2f5ebd0 46 }
decfrv 7:a935e2f5ebd0 47 inline bool Nav_Switch::right()
decfrv 7:a935e2f5ebd0 48 {
decfrv 7:a935e2f5ebd0 49 return !(_pins[3]);
decfrv 7:a935e2f5ebd0 50 }
decfrv 7:a935e2f5ebd0 51 inline bool Nav_Switch::fire()
decfrv 7:a935e2f5ebd0 52 {
decfrv 7:a935e2f5ebd0 53 return !(_pins[4]);
decfrv 7:a935e2f5ebd0 54 }
decfrv 7:a935e2f5ebd0 55 inline int Nav_Switch::read()
decfrv 7:a935e2f5ebd0 56 {
decfrv 7:a935e2f5ebd0 57 return _pins.read();
decfrv 7:a935e2f5ebd0 58 }
decfrv 7:a935e2f5ebd0 59 inline Nav_Switch::operator int ()
decfrv 7:a935e2f5ebd0 60 {
decfrv 7:a935e2f5ebd0 61 return _pins.read();
decfrv 7:a935e2f5ebd0 62 }
emilmont 1:491820ee784d 63
emilmont 1:491820ee784d 64 DigitalOut led1(LED1);
emilmont 1:491820ee784d 65 DigitalOut led2(LED2);
decfrv 7:a935e2f5ebd0 66 DigitalOut led3(LED3);
decfrv 7:a935e2f5ebd0 67 DigitalOut led4(LED4);
decfrv 7:a935e2f5ebd0 68 uLCD_4DGL uLCD(p28,p27,p30);
decfrv 7:a935e2f5ebd0 69 Serial pc(USBTX, USBRX);
decfrv 7:a935e2f5ebd0 70
decfrv 7:a935e2f5ebd0 71 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
decfrv 7:a935e2f5ebd0 72 DigitalIn sddetect(p9);
decfrv 7:a935e2f5ebd0 73
decfrv 7:a935e2f5ebd0 74 Nav_Switch myNav( p16, p19, p15, p20, p17); //pin order on Sparkfun breakout
decfrv 7:a935e2f5ebd0 75
decfrv 7:a935e2f5ebd0 76 //number pad
decfrv 7:a935e2f5ebd0 77 InterruptIn interrupt(p21);
decfrv 7:a935e2f5ebd0 78 I2C i2c(p9, p10);
decfrv 7:a935e2f5ebd0 79 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
decfrv 7:a935e2f5ebd0 80
decfrv 7:a935e2f5ebd0 81 AnalogOut DACout(p18);
decfrv 7:a935e2f5ebd0 82 wave_player waver(&DACout);
decfrv 7:a935e2f5ebd0 83
decfrv 7:a935e2f5ebd0 84 Mutex lcdMutex;
decfrv 7:a935e2f5ebd0 85
decfrv 7:a935e2f5ebd0 86
decfrv 7:a935e2f5ebd0 87
decfrv 7:a935e2f5ebd0 88 int xndx;
decfrv 7:a935e2f5ebd0 89 int yndx;
decfrv 7:a935e2f5ebd0 90
decfrv 7:a935e2f5ebd0 91 static int nums [9][9] = {{0,5,4, 9,3,8, 2,7,6},
decfrv 7:a935e2f5ebd0 92 {6,7,9, 1,4,2, 8,3,5},
decfrv 7:a935e2f5ebd0 93 {8,2,3, 7,5,6, 4,9,1},
decfrv 7:a935e2f5ebd0 94
decfrv 7:a935e2f5ebd0 95 {4,8,5, 2,7,9, 6,1,3},
decfrv 7:a935e2f5ebd0 96 {7,3,1, 6,0,4, 5,2,9},
decfrv 7:a935e2f5ebd0 97 {9,6,2, 3,1,5, 7,8,4},
decfrv 7:a935e2f5ebd0 98
decfrv 7:a935e2f5ebd0 99 {5,1,6, 0,2,3, 9,4,7},
decfrv 7:a935e2f5ebd0 100 {2,9,7, 4,6,1, 3,5,8},
decfrv 7:a935e2f5ebd0 101 {3,4,8, 5,9,7, 1,6,2}};
decfrv 7:a935e2f5ebd0 102
decfrv 7:a935e2f5ebd0 103
decfrv 7:a935e2f5ebd0 104 bool preset[9][9] = {};
decfrv 7:a935e2f5ebd0 105
decfrv 7:a935e2f5ebd0 106 bool interruptChange = false;
decfrv 7:a935e2f5ebd0 107 int interruptNum = -1;
decfrv 7:a935e2f5ebd0 108
decfrv 7:a935e2f5ebd0 109 // Key hit/release interrupt routine
decfrv 7:a935e2f5ebd0 110 void fallInterrupt() {
decfrv 7:a935e2f5ebd0 111
decfrv 7:a935e2f5ebd0 112 int value=mpr121.read(0x00);
decfrv 7:a935e2f5ebd0 113 value +=mpr121.read(0x01)<<8;
decfrv 7:a935e2f5ebd0 114
decfrv 7:a935e2f5ebd0 115 int number = 0;
decfrv 7:a935e2f5ebd0 116 if ((value>>9) & 0x01) {
decfrv 7:a935e2f5ebd0 117 number = 9;
decfrv 7:a935e2f5ebd0 118 } else if ((value>>8) & 0x01) {
decfrv 7:a935e2f5ebd0 119 number = 8;
decfrv 7:a935e2f5ebd0 120 } else if ((value>>7) & 0x01) {
decfrv 7:a935e2f5ebd0 121 number = 7;
decfrv 7:a935e2f5ebd0 122 } else if ((value>>6) & 0x01) {
decfrv 7:a935e2f5ebd0 123 number = 6;
decfrv 7:a935e2f5ebd0 124 } else if ((value>>5) & 0x01) {
decfrv 7:a935e2f5ebd0 125 number = 5;
decfrv 7:a935e2f5ebd0 126 } else if ((value>>4) & 0x01) {
decfrv 7:a935e2f5ebd0 127 number = 4;
decfrv 7:a935e2f5ebd0 128 } else if ((value>>3) & 0x01) {
decfrv 7:a935e2f5ebd0 129 number = 3;
decfrv 7:a935e2f5ebd0 130 } else if ((value>>2) & 0x01) {
decfrv 7:a935e2f5ebd0 131 number = 2;
decfrv 7:a935e2f5ebd0 132 } else if ((value>>1) & 0x01) {
decfrv 7:a935e2f5ebd0 133 number = 1;
decfrv 7:a935e2f5ebd0 134 } else if (value & 0x01) {
decfrv 7:a935e2f5ebd0 135 number = 0;
decfrv 7:a935e2f5ebd0 136 }
decfrv 7:a935e2f5ebd0 137
decfrv 7:a935e2f5ebd0 138 if (!preset[yndx][xndx]) {
decfrv 7:a935e2f5ebd0 139 interruptNum = number;
decfrv 7:a935e2f5ebd0 140 //nums[yndx][xndx] = number;
decfrv 7:a935e2f5ebd0 141 interruptChange = true;
decfrv 7:a935e2f5ebd0 142 }
decfrv 7:a935e2f5ebd0 143 }
decfrv 7:a935e2f5ebd0 144
decfrv 7:a935e2f5ebd0 145 int main() {
decfrv 7:a935e2f5ebd0 146 nums[0][0] = 1;
decfrv 7:a935e2f5ebd0 147 interrupt.fall(&fallInterrupt);
decfrv 7:a935e2f5ebd0 148 interrupt.mode(PullUp);
decfrv 7:a935e2f5ebd0 149
decfrv 7:a935e2f5ebd0 150 uLCD.background_color(WHITE);
decfrv 7:a935e2f5ebd0 151 uLCD.cls();
decfrv 7:a935e2f5ebd0 152 uLCD.color(BLACK);
decfrv 7:a935e2f5ebd0 153 uLCD.text_height(1);
decfrv 7:a935e2f5ebd0 154 uLCD.text_width(1);
decfrv 7:a935e2f5ebd0 155 uLCD.textbackground_color(WHITE);
decfrv 7:a935e2f5ebd0 156 //uLCD.printf("1 2 3 4 5 6 7 8 9\n\n1 2 3 4 5 6 7 8 9\n\n1 2 3 4 5 6 7 8 9\n1 2 3 4 5 6 7 8 9\n\n1 2 3 4 5 6 7 8 9\n\n1 2 3 4 5 6 7 8 9\n1 2 3 4 5 6 7 8 9\n\n1 2 3 4 5 6 7 8 9\n\n1 2 3 4 5 6 7 8 9");
decfrv 7:a935e2f5ebd0 157
decfrv 7:a935e2f5ebd0 158 /*uLCD.filled_triangle(30, 61, 13, 81, 51, 112, GREEN);
decfrv 7:a935e2f5ebd0 159 uLCD.filled_triangle(30, 61, 51, 112, 66, 92, GREEN);
decfrv 7:a935e2f5ebd0 160 uLCD.filled_triangle(51, 112, 104, 11, 120, 24, GREEN);
decfrv 7:a935e2f5ebd0 161 uLCD.filled_triangle(51, 112, 31, 96, 104, 11, GREEN);*/
decfrv 7:a935e2f5ebd0 162
decfrv 7:a935e2f5ebd0 163 uLCD.color(BLUE);
decfrv 7:a935e2f5ebd0 164 for (int i = 0; i < 9; i++) {
decfrv 7:a935e2f5ebd0 165 for (int j = 0; j < 9; j++) {
decfrv 7:a935e2f5ebd0 166 if (nums[i][j] == 0) {
decfrv 7:a935e2f5ebd0 167 uLCD.printf(" ");
decfrv 7:a935e2f5ebd0 168 preset[i][j] = false;
decfrv 7:a935e2f5ebd0 169 } else {
decfrv 7:a935e2f5ebd0 170 uLCD.printf("%d ", nums[i][j]);
decfrv 7:a935e2f5ebd0 171 preset[i][j] = true;
decfrv 7:a935e2f5ebd0 172 }
decfrv 7:a935e2f5ebd0 173 }
decfrv 7:a935e2f5ebd0 174 //uLCD.printf("\n");
decfrv 7:a935e2f5ebd0 175 if (i != 2 && i != 5) {
decfrv 7:a935e2f5ebd0 176 uLCD.printf("\n");
decfrv 7:a935e2f5ebd0 177 }
decfrv 7:a935e2f5ebd0 178 }
decfrv 7:a935e2f5ebd0 179 uLCD.color(BLACK);
decfrv 7:a935e2f5ebd0 180
decfrv 7:a935e2f5ebd0 181
decfrv 7:a935e2f5ebd0 182 uLCD.line(40, 0, 40, 128, BLACK);
decfrv 7:a935e2f5ebd0 183 uLCD.line(80, 0, 80, 128, BLACK);
decfrv 7:a935e2f5ebd0 184 uLCD.line(0, 40, 128, 40, BLACK);
decfrv 7:a935e2f5ebd0 185 uLCD.line(0, 80, 128, 80, BLACK);
decfrv 7:a935e2f5ebd0 186
decfrv 7:a935e2f5ebd0 187 xndx = 0;
decfrv 7:a935e2f5ebd0 188 yndx = 0;
decfrv 7:a935e2f5ebd0 189 int oldxndx = 0;
decfrv 7:a935e2f5ebd0 190 int oldyndx = 0;
decfrv 7:a935e2f5ebd0 191 bool changed = true;
decfrv 7:a935e2f5ebd0 192
decfrv 7:a935e2f5ebd0 193 bool up = false;
decfrv 7:a935e2f5ebd0 194 bool down = false;
decfrv 7:a935e2f5ebd0 195 bool left = false;
decfrv 7:a935e2f5ebd0 196 bool right = false;
decfrv 7:a935e2f5ebd0 197 bool fire = false;
decfrv 7:a935e2f5ebd0 198 //uLCD.rectangle(0,0,7,7, BLUE);
decfrv 7:a935e2f5ebd0 199
decfrv 7:a935e2f5ebd0 200
decfrv 7:a935e2f5ebd0 201 bool keepGoing = true;
decfrv 7:a935e2f5ebd0 202 while (keepGoing) {
decfrv 7:a935e2f5ebd0 203 //led1 = !led1;
decfrv 7:a935e2f5ebd0 204 oldyndx = yndx;
decfrv 7:a935e2f5ebd0 205 oldxndx = xndx;
decfrv 7:a935e2f5ebd0 206 if(myNav.left() && !up) {
decfrv 7:a935e2f5ebd0 207 if (yndx > 0) {
decfrv 7:a935e2f5ebd0 208 //oldyndx=yndx;
decfrv 7:a935e2f5ebd0 209 //do {
decfrv 7:a935e2f5ebd0 210 yndx--;
decfrv 7:a935e2f5ebd0 211 //} while (preset[yndx][xndx] && yndx != 0);
decfrv 7:a935e2f5ebd0 212 changed = true;
decfrv 7:a935e2f5ebd0 213 }
decfrv 7:a935e2f5ebd0 214 up = true;
decfrv 7:a935e2f5ebd0 215 } else if(myNav.right() && !down) {
decfrv 7:a935e2f5ebd0 216 if (yndx < 8) {
decfrv 7:a935e2f5ebd0 217 //oldyndx=yndx;
decfrv 7:a935e2f5ebd0 218 //do {
decfrv 7:a935e2f5ebd0 219 yndx++;
decfrv 7:a935e2f5ebd0 220 //} while (preset[yndx][xndx] && yndx != 8);
decfrv 7:a935e2f5ebd0 221 changed = true;
decfrv 7:a935e2f5ebd0 222 }
decfrv 7:a935e2f5ebd0 223 down = true;
decfrv 7:a935e2f5ebd0 224 } else if(myNav.down() && !left) {
decfrv 7:a935e2f5ebd0 225 if (xndx > 0) {
decfrv 7:a935e2f5ebd0 226 //oldxndx=xndx;
decfrv 7:a935e2f5ebd0 227 //do {
decfrv 7:a935e2f5ebd0 228 xndx--;
decfrv 7:a935e2f5ebd0 229 //} while (preset[yndx][xndx] && xndx != 0);
decfrv 7:a935e2f5ebd0 230 changed = true;
decfrv 7:a935e2f5ebd0 231 }
decfrv 7:a935e2f5ebd0 232 left= true;
decfrv 7:a935e2f5ebd0 233 } else if(myNav.up() && !right) {
decfrv 7:a935e2f5ebd0 234 if (xndx < 8) {
decfrv 7:a935e2f5ebd0 235 //oldxndx=xndx;
decfrv 7:a935e2f5ebd0 236 //do {
decfrv 7:a935e2f5ebd0 237 xndx++;
decfrv 7:a935e2f5ebd0 238 //} while (preset[yndx][xndx] && xndx != 8);
decfrv 7:a935e2f5ebd0 239 changed = true;
decfrv 7:a935e2f5ebd0 240 }
decfrv 7:a935e2f5ebd0 241 right = true;
decfrv 7:a935e2f5ebd0 242 } else if(myNav.fire() && !fire) {
decfrv 7:a935e2f5ebd0 243
decfrv 7:a935e2f5ebd0 244 bool test = true;
decfrv 7:a935e2f5ebd0 245 ///////////////////////////////////////////////
decfrv 7:a935e2f5ebd0 246 pc.printf("5,5: %d\r\n",nums[4][4]);
decfrv 7:a935e2f5ebd0 247 for (int i = 0; i < 9; i++) {
decfrv 7:a935e2f5ebd0 248 int sum = 0;
decfrv 7:a935e2f5ebd0 249 int product = 1;
decfrv 7:a935e2f5ebd0 250 for (int j = 0; j < 9; j++) {
decfrv 7:a935e2f5ebd0 251 product *= nums[i][j];
decfrv 7:a935e2f5ebd0 252 sum += nums[i][j];
decfrv 7:a935e2f5ebd0 253 }
decfrv 7:a935e2f5ebd0 254 if (sum != 45 || product != 362880) {
decfrv 7:a935e2f5ebd0 255 test = false;
decfrv 7:a935e2f5ebd0 256 pc.printf("Bad Row: %d Sum:%d Product:%d\r\n", i + 1, sum, product);
decfrv 7:a935e2f5ebd0 257 }
decfrv 7:a935e2f5ebd0 258 }
decfrv 7:a935e2f5ebd0 259
decfrv 7:a935e2f5ebd0 260 for (int i = 0; i < 9; i++) {
decfrv 7:a935e2f5ebd0 261 int sum = 0;
decfrv 7:a935e2f5ebd0 262 int product = 1;
decfrv 7:a935e2f5ebd0 263 for (int j = 0; j < 9; j++) {
decfrv 7:a935e2f5ebd0 264 product *= nums[j][i];
decfrv 7:a935e2f5ebd0 265 sum += nums[j][i];
decfrv 7:a935e2f5ebd0 266 }
decfrv 7:a935e2f5ebd0 267 if (sum != 45 || product != 362880) {
decfrv 7:a935e2f5ebd0 268 test = false;
decfrv 7:a935e2f5ebd0 269 pc.printf("Bad Column: %d Sum:%d Product:%d\r\n", i + 1, sum, product);
decfrv 7:a935e2f5ebd0 270 }
decfrv 7:a935e2f5ebd0 271 }
decfrv 7:a935e2f5ebd0 272
decfrv 7:a935e2f5ebd0 273 for (int m = 0; m < 3; m++) {
decfrv 7:a935e2f5ebd0 274 for (int k = 0; k < 3; k++) {
decfrv 7:a935e2f5ebd0 275 int sum = 0;
decfrv 7:a935e2f5ebd0 276 int product = 1;
decfrv 7:a935e2f5ebd0 277 for (int i = 0; i < 3; i++) {
decfrv 7:a935e2f5ebd0 278 for (int j = 0; j < 3; j++) {
decfrv 7:a935e2f5ebd0 279 product *= nums[3*k + i][3*m + j];
decfrv 7:a935e2f5ebd0 280 sum += nums[3*k + i][3*m + j];
decfrv 7:a935e2f5ebd0 281 }
decfrv 7:a935e2f5ebd0 282 }
decfrv 7:a935e2f5ebd0 283 if (sum != 45 || product != 362880) {
decfrv 7:a935e2f5ebd0 284 test = false;
decfrv 7:a935e2f5ebd0 285 pc.printf("Bad Box: %d Sum:%d Product:%d\r\n", m*3 + k + 1, sum, product);
decfrv 7:a935e2f5ebd0 286 }
decfrv 7:a935e2f5ebd0 287 }
decfrv 7:a935e2f5ebd0 288 }
decfrv 7:a935e2f5ebd0 289 if (test) {
decfrv 7:a935e2f5ebd0 290 //Play Sound
decfrv 7:a935e2f5ebd0 291 for (int i = 0; i < 20; i++) {
decfrv 7:a935e2f5ebd0 292 uLCD.line(11+i,81-i, 49+i, 112-i, GREEN);
decfrv 7:a935e2f5ebd0 293 uLCD.line(12+i,81-i, 50+i, 112-i, GREEN);
decfrv 7:a935e2f5ebd0 294 uLCD.line(51-i,112-i, 120-i,24-i, GREEN);
decfrv 7:a935e2f5ebd0 295 uLCD.line(52-i,112-i, 121-i,24-i, GREEN);
decfrv 7:a935e2f5ebd0 296 }
decfrv 7:a935e2f5ebd0 297 keepGoing = false;
decfrv 7:a935e2f5ebd0 298 pc.printf("SUCCESS :)\r\n");
decfrv 7:a935e2f5ebd0 299
decfrv 7:a935e2f5ebd0 300 FILE *wave_file;
decfrv 7:a935e2f5ebd0 301 wave_file = fopen("/sd/champs.wav","r");
decfrv 7:a935e2f5ebd0 302 bool playing = true;
decfrv 7:a935e2f5ebd0 303 int vol = 5;
decfrv 7:a935e2f5ebd0 304 waver.play(wave_file, playing, vol);
decfrv 7:a935e2f5ebd0 305 } else {
decfrv 7:a935e2f5ebd0 306 for (int i = 0; i < 20; i++) {
decfrv 7:a935e2f5ebd0 307 uLCD.line(21+i,15,89+i,118, RED);
decfrv 7:a935e2f5ebd0 308 uLCD.line(89+i,15,21+i,118, RED);
decfrv 7:a935e2f5ebd0 309 }
decfrv 7:a935e2f5ebd0 310 pc.printf("FAILURE :(\r\n");
decfrv 7:a935e2f5ebd0 311 FILE *wave_file;
decfrv 7:a935e2f5ebd0 312 wave_file = fopen("/sd/failure.wav","r");
decfrv 7:a935e2f5ebd0 313 bool playing = true;
decfrv 7:a935e2f5ebd0 314 int vol = 5;
decfrv 7:a935e2f5ebd0 315 waver.play(wave_file, playing, vol);
decfrv 7:a935e2f5ebd0 316 //wait(5);
decfrv 7:a935e2f5ebd0 317 //redraw
decfrv 7:a935e2f5ebd0 318 uLCD.cls();
decfrv 7:a935e2f5ebd0 319 uLCD.color(BLUE);
decfrv 7:a935e2f5ebd0 320 for (int i = 0; i < 9; i++) {
decfrv 7:a935e2f5ebd0 321 for (int j = 0; j < 9; j++) {
decfrv 7:a935e2f5ebd0 322 if (nums[i][j] == 0) {
decfrv 7:a935e2f5ebd0 323 uLCD.printf(" ");
decfrv 7:a935e2f5ebd0 324 preset[i][j] = false;
decfrv 7:a935e2f5ebd0 325 } else {
decfrv 7:a935e2f5ebd0 326 uLCD.printf("%d ", nums[i][j]);
decfrv 7:a935e2f5ebd0 327 preset[i][j] = true;
decfrv 7:a935e2f5ebd0 328 }
decfrv 7:a935e2f5ebd0 329 }
decfrv 7:a935e2f5ebd0 330 //uLCD.printf("\n");
decfrv 7:a935e2f5ebd0 331 if (i != 2 && i != 5) {
decfrv 7:a935e2f5ebd0 332 uLCD.printf("\n");
decfrv 7:a935e2f5ebd0 333 }
decfrv 7:a935e2f5ebd0 334 }
decfrv 7:a935e2f5ebd0 335 uLCD.color(BLACK);
decfrv 7:a935e2f5ebd0 336
decfrv 7:a935e2f5ebd0 337
decfrv 7:a935e2f5ebd0 338 uLCD.line(40, 0, 40, 128, BLACK);
decfrv 7:a935e2f5ebd0 339 uLCD.line(80, 0, 80, 128, BLACK);
decfrv 7:a935e2f5ebd0 340 uLCD.line(0, 40, 128, 40, BLACK);
decfrv 7:a935e2f5ebd0 341 uLCD.line(0, 80, 128, 80, BLACK);
decfrv 7:a935e2f5ebd0 342 }
decfrv 7:a935e2f5ebd0 343
decfrv 7:a935e2f5ebd0 344 ///////////////////////////////////////////////
decfrv 7:a935e2f5ebd0 345 fire = true;
decfrv 7:a935e2f5ebd0 346 } else {
decfrv 7:a935e2f5ebd0 347 up = false;
decfrv 7:a935e2f5ebd0 348 down = false;
decfrv 7:a935e2f5ebd0 349 left = false;
decfrv 7:a935e2f5ebd0 350 right = false;
decfrv 7:a935e2f5ebd0 351 fire = false;
decfrv 7:a935e2f5ebd0 352 }
decfrv 7:a935e2f5ebd0 353
decfrv 7:a935e2f5ebd0 354 if (changed) {
decfrv 7:a935e2f5ebd0 355 int xpoint = xndx * 14;
decfrv 7:a935e2f5ebd0 356 int ypoint = yndx * 16 - (yndx/3) * 8;
decfrv 7:a935e2f5ebd0 357 int oxpoint = oldxndx * 14;
decfrv 7:a935e2f5ebd0 358 int oypoint = oldyndx * 16 - (oldyndx/3) * 8;
decfrv 7:a935e2f5ebd0 359
decfrv 7:a935e2f5ebd0 360 uLCD.rectangle(oxpoint,oypoint-1,oxpoint+7,oypoint+7, WHITE);
decfrv 7:a935e2f5ebd0 361 uLCD.rectangle(xpoint,ypoint-1,xpoint+7,ypoint+7, BLUE);
decfrv 7:a935e2f5ebd0 362 changed = false;
decfrv 7:a935e2f5ebd0 363 }
decfrv 7:a935e2f5ebd0 364 //pc.printf("Joystick: %d %d %d %d %d\n\r", myNav[0], myNav[1], myNav[2], myNav[3], myNav[4]);
decfrv 7:a935e2f5ebd0 365 //int number = -1;
decfrv 7:a935e2f5ebd0 366 if (interruptChange && nums[yndx][xndx] != 0 && !preset[yndx][xndx]) {
decfrv 7:a935e2f5ebd0 367 //number = nums[yndx][xndx];
decfrv 7:a935e2f5ebd0 368 //pc.printf("Number: %d\r\n", nums[yndx][xndx]);
decfrv 7:a935e2f5ebd0 369 uLCD.locate(xndx * 2, yndx *2 - (yndx/3));
decfrv 7:a935e2f5ebd0 370 uLCD.printf("%d", nums[yndx][xndx]);
decfrv 7:a935e2f5ebd0 371 interruptChange = false;
decfrv 7:a935e2f5ebd0 372
decfrv 7:a935e2f5ebd0 373 //pc.printf("Test: %d\r\n", nums[yndx][xndx]);
decfrv 7:a935e2f5ebd0 374
decfrv 7:a935e2f5ebd0 375 int xpoint = xndx * 14;
decfrv 7:a935e2f5ebd0 376 int ypoint = yndx * 16 - (yndx/3) * 8;
decfrv 7:a935e2f5ebd0 377 uLCD.rectangle(xpoint,ypoint-1,xpoint+7,ypoint+7, BLUE);
decfrv 7:a935e2f5ebd0 378 }
decfrv 7:a935e2f5ebd0 379 if (interruptNum != -1 && interruptNum != 0) {
decfrv 7:a935e2f5ebd0 380 //pc.printf("Setting 5,5 as %d\r\n", interruptNum);
decfrv 7:a935e2f5ebd0 381 nums[yndx][xndx] = interruptNum;
decfrv 7:a935e2f5ebd0 382 interruptNum = -1;
decfrv 7:a935e2f5ebd0 383 FILE *wave_file;
decfrv 7:a935e2f5ebd0 384 wave_file = fopen("/sd/beep.wav","r");
decfrv 7:a935e2f5ebd0 385 bool playing = true;
decfrv 7:a935e2f5ebd0 386 int vol = 5;
decfrv 7:a935e2f5ebd0 387 waver.play(wave_file, playing, vol);
decfrv 7:a935e2f5ebd0 388 }
decfrv 7:a935e2f5ebd0 389 //pc.printf("Test2: %d\r\n", nums[yndx][xndx]);
decfrv 7:a935e2f5ebd0 390 wait(0.1);
emilmont 1:491820ee784d 391 }
emilmont 1:491820ee784d 392 }