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

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++) {