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
Diff: main.cpp
- Revision:
- 2:c2ec8aa8b53e
- Parent:
- 1:288da1e5d10b
--- a/main.cpp Mon Oct 20 23:54:30 2014 +0000 +++ b/main.cpp Thu Mar 12 18:08:10 2015 +0000 @@ -1,7 +1,31 @@ /* -Dhruvin Desai and Joseph Sobchuk +Zhi Feng and Zhongtao Yang 3/12/2015 +fallInterrupt() and API for mpr121 written by Anthony Buckton in 2011 + +Wire Connection: + +uLCD: +5V---Vcc +GND---GND +RX---P28 +TX---P27 +RESET---P29 -fallInterrupt() and API for mpr121 written by Anthony Buckton in 2011 +touch keypad: +Vcc---Vcc +SDA-P10 +SCL---P9 +IRQ---P26 +Vcc---Vcc + +Add two 4.7k pullup resistors for the SDA and SCL lines. + +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. + + */ #include <mbed.h> @@ -32,25 +56,25 @@ case 1: if (on[0] == 0) { // If circle 1 is off then Fill 1st Circle - uLCD.filled_circle(initpos, initpos, radius, RED); // Fill 1st Circle + uLCD.filled_circle(initpos, initpos, radius, BLACK); // Fill 1st Circle on[0] = 1; // Then change status of circle 1 to on } else if (on[0] == 1) { // If circle 1 is on then erase 1st circle - uLCD.filled_circle(initpos, initpos, radius, BLACK); - uLCD.circle(initpos, initpos, radius, RED); // Erase 1st Circle + uLCD.filled_circle(initpos, initpos, radius, WHITE); + uLCD.circle(initpos, initpos, radius, BLACK); // Erase 1st Circle on[0] = 0; } break; case 2: if (on[1] == 0) { - uLCD.filled_circle(initpos + shift, initpos, radius, RED); // Fill 2nd Circle + uLCD.filled_circle(initpos + shift, initpos, radius, BLACK); // Fill 2nd Circle on[1] = 1; } else if (on[1] == 1) { - uLCD.filled_circle(initpos + shift, initpos, radius, BLACK); - uLCD.circle(initpos + shift, initpos, radius, RED); // Erase 2nd Circle + uLCD.filled_circle(initpos + shift, initpos, radius, WHITE); + uLCD.circle(initpos + shift, initpos, radius, WHITE); // Erase 2nd Circle on[1] = 0; } break; @@ -58,12 +82,12 @@ case 3: if (on[2] == 0) { - uLCD.filled_circle(initpos + 2*shift, initpos, radius, RED); + uLCD.filled_circle(initpos + 2*shift, initpos, radius, BLACK); on[2] = 1; } else if (on[2] == 1) { - uLCD.filled_circle(initpos + 2*shift, initpos, radius, BLACK); - uLCD.circle(initpos + 2*shift, initpos, radius, RED); + uLCD.filled_circle(initpos + 2*shift, initpos, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos, radius, BLACK); on[2] = 0; } break; @@ -71,39 +95,39 @@ case 4: if (on[3] == 0) { - uLCD.filled_circle(initpos, initpos + shift, radius, RED); // Fill 4th Circle + uLCD.filled_circle(initpos, initpos + shift, radius, BLACK); // Fill 4th Circle on[3] = 1; } else if (on[3] == 1) { - uLCD.filled_circle(initpos, initpos + shift, radius, BLACK); - uLCD.circle(initpos, initpos + shift, radius, RED); // Erase 4th Circle + uLCD.filled_circle(initpos, initpos + shift, radius, WHITE); + uLCD.circle(initpos, initpos + shift, radius, BLACK); // Erase 4th Circle on[3] = 0; } break; case 5: if (on[4] == 0) { - uLCD.filled_circle(initpos + shift, initpos + shift, radius, RED); // Fill 5th Circle + uLCD.filled_circle(initpos + shift, initpos + shift, radius, BLACK); // Fill 5th Circle on[4] = 1; } else if (on[4] == 1) { - uLCD.filled_circle(initpos + shift, initpos + shift, radius, BLACK); - uLCD.circle(initpos + shift, initpos + shift, radius, RED); // Erase 5th Circle + uLCD.filled_circle(initpos + shift, initpos + shift, radius, WHITE); + uLCD.circle(initpos + shift, initpos + shift, radius, BLACK); // Erase 5th Circle on[4] = 0; } break; case 6: if (on[5] == 0) { - uLCD.filled_circle(initpos + 2*shift, initpos + shift, radius, RED); // Fill 6th Circle + uLCD.filled_circle(initpos + 2*shift, initpos + shift, radius, BLACK); // Fill 6th Circle on[5] = 1; } else if (on[5] == 1) { - uLCD.filled_circle(initpos + 2*shift, initpos + shift, radius, BLACK); - uLCD.circle(initpos + 2*shift, initpos + shift, radius, RED); // Erase 6th Circle + uLCD.filled_circle(initpos + 2*shift, initpos + shift, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos + shift, radius, BLACK); // Erase 6th Circle on[5] = 0; } break; @@ -112,13 +136,13 @@ case 7: if (on[6] == 0) { - uLCD.filled_circle(initpos, initpos + 2*shift, radius, RED); // Fill 7th Circle + uLCD.filled_circle(initpos, initpos + 2*shift, radius, BLACK); // Fill 7th Circle on[6] = 1; } else if (on[6] == 1) { - uLCD.filled_circle(initpos, initpos + 2*shift, radius, BLACK); // Erase 7th Circle - uLCD.circle(initpos, initpos + 2*shift, radius, RED); + uLCD.filled_circle(initpos, initpos + 2*shift, radius, WHITE); // Erase 7th Circle + uLCD.circle(initpos, initpos + 2*shift, radius, BLACK); on[6] = 0; } break; @@ -127,13 +151,13 @@ case 8: if (on[7] == 0) { - uLCD.filled_circle(initpos + shift, initpos + 2*shift, radius, RED); // Fill 8th Circle + uLCD.filled_circle(initpos + shift, initpos + 2*shift, radius, BLACK); // Fill 8th Circle on[7] = 1; } else if (on[7] == 1) { - uLCD.filled_circle(initpos + shift, initpos + 2*shift, radius, BLACK); // Erase 8th Circle - uLCD.circle(initpos + shift, initpos + 2*shift, radius, RED); + uLCD.filled_circle(initpos + shift, initpos + 2*shift, radius, WHITE); // Erase 8th Circle + uLCD.circle(initpos + shift, initpos + 2*shift, radius, BLACK); on[7] = 0; } break; @@ -142,13 +166,13 @@ case 9: if (on[8] == 0) { - uLCD.filled_circle(initpos + 2*shift, initpos + 2*shift, radius, RED); // Fill 9th Circle + uLCD.filled_circle(initpos + 2*shift, initpos + 2*shift, radius, BLACK); // Fill 9th Circle on[8] = 1; } else if (on[8] == 1) { - uLCD.filled_circle(initpos + 2*shift, initpos + 2*shift, radius, BLACK); - uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, RED); // Erase 9th Circle + uLCD.filled_circle(initpos + 2*shift, initpos + 2*shift, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, BLACK); // Erase 9th Circle on[8] = 0; } break; @@ -163,63 +187,39 @@ switch (key_code) { case 2: - invert(on,7); - invert(on,4); - invert(on,5); - invert(on,8); + invert(on,3); break; case 3: - invert(on,7); - invert(on,4); - invert(on,1); + invert(on,6); break; case 4: - invert(on,2); - invert(on,4); - invert(on,5); - invert(on,1); + invert(on,9); break; case 6: - invert(on,9); - invert(on,7); - invert(on,8); + invert(on,2); break; case 7: - invert(on,2); invert(on,5); - invert(on,4); - invert(on,8); - invert(on,6); break; case 8: - invert(on,1); - invert(on,2); - invert(on,3); + invert(on,8); break; case 10: - invert(on,8); - invert(on,9); - invert(on,5); - invert(on,6); + invert(on,1); break; case 11: - invert(on,9); - invert(on,6); - invert(on,3); + invert(on,4); break; case 12: - invert(on,2); - invert(on,3); - invert(on,6); - invert(on,5); + invert(on,7); break; } } @@ -251,15 +251,15 @@ int j; uLCD.rectangle(0,0,127,127,WHITE); // Draw border // Draw empty circles in correct positions - uLCD.circle(initpos, initpos, radius, RED); - uLCD.circle(initpos + shift, initpos, radius, RED); - uLCD.circle(initpos + 2*shift, initpos, radius, RED); - uLCD.circle(initpos, initpos + shift, radius, RED); - uLCD.circle(initpos + shift, initpos + shift, radius, RED); - uLCD.circle(initpos + 2*shift, initpos + shift, radius, RED); - uLCD.circle(initpos, initpos + 2*shift, radius, RED); - uLCD.circle(initpos + shift, initpos + 2*shift, radius, RED); - uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, RED); + uLCD.circle(initpos, initpos, radius, WHITE); + uLCD.circle(initpos + shift, initpos, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos, radius, WHITE); + uLCD.circle(initpos, initpos + shift, radius, WHITE); + uLCD.circle(initpos + shift, initpos + shift, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos + shift, radius, WHITE); + uLCD.circle(initpos, initpos + 2*shift, radius, WHITE); + uLCD.circle(initpos + shift, initpos + 2*shift, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, WHITE); interrupt.fall(&fallInterrupt); interrupt.mode(PullUp); @@ -286,15 +286,15 @@ // Draw empty circles in correct positions - uLCD.circle(initpos, initpos, radius, RED); - uLCD.circle(initpos + shift, initpos, radius, RED); - uLCD.circle(initpos + 2*shift, initpos, radius, RED); - uLCD.circle(initpos, initpos + shift, radius, RED); - uLCD.circle(initpos + shift, initpos + shift, radius, RED); - uLCD.circle(initpos + 2*shift, initpos + shift, radius, RED); - uLCD.circle(initpos, initpos + 2*shift, radius, RED); - uLCD.circle(initpos + shift, initpos + 2*shift, radius, RED); - uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, RED); + uLCD.circle(initpos, initpos, radius, WHITE); + uLCD.circle(initpos + shift, initpos, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos, radius, WHITE); + uLCD.circle(initpos, initpos + shift, radius, WHITE); + uLCD.circle(initpos + shift, initpos + shift, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos + shift, radius, WHITE); + uLCD.circle(initpos, initpos + 2*shift, radius, WHITE); + uLCD.circle(initpos + shift, initpos + 2*shift, radius, WHITE); + uLCD.circle(initpos + 2*shift, initpos + 2*shift, radius, WHITE); //Make sure they match the array for(j = 0; j < 9; j++) {