Gatech ECE 4180 Lab 4 Deal or No Deal Game -Alex Ferrara -Luke LeFeve

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed wave_player

Revision:
4:1c7f2541afc1
Parent:
3:0d3cadcd159b
Child:
5:610461a90e3a
--- a/main.cpp	Mon Oct 31 08:07:57 2016 +0000
+++ b/main.cpp	Mon Oct 31 08:59:30 2016 +0000
@@ -1,35 +1,20 @@
-#include <mbed.h>
+#include "mbed.h"
+#include "uLCD_4DGL.h"
 #include <mpr121.h>
-#include "uLCD_4DGL.h"
-
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
-DigitalIn pb1(p8);
-uLCD_4DGL uLCD(p28,p27,p30);
-
+volatile bool stateTrigger;       // true if hit , false if released
+volatile int buttonValue;         // value of the pin touched.
 void draw_case(int x, int y);
 void draw_case_grid(void);
 void draw_single_case(int caseNum);
 void flashCase(int caseNum);
 void draw_banker_screen(void);
-
-char* valuesStr[] = {"1","5","10","20","50","100","$ 250","$ 500","$  1k","$2.5k","$  5k","$ 10k"};
-bool isCase[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-bool isOpen[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-bool valueOpen[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-int case_values[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-int values[12] = {1, 5, 10, 20, 50, 100, 250, 500, 1000, 2500, 5000, 10000};
-int cases_picked = 0;
-int cases_to_pick;
-int round = 0;
-int G_HANDLE_HEIGHT = 1;
-int G_HANDLE_LENGTH = 2;
-int G_CASE_HEIGHT   = 2;
-int G_CASE_LENGTH   = 3;
-int current_val;
-
+uLCD_4DGL uLCD(p28,p27,p30);
+bool isCase[] = {false,false,false,false,false,false,false,false,false,false,false,false};
+bool isOpen[] = {false,false,false,false,false,false,false,false,false,false,false,false};
 // Create the interrupt receiver object on pin 26
 InterruptIn interrupt(p26);
 
@@ -40,77 +25,10 @@
 // constructor(i2c object, i2c address of the mpr121)
 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
 
-
-void round0(){
-    cases_to_pick = 1;
-    draw_case_grid();
-}
-
-int bankOfferGen(){
-    float multiplier;
-    int offer = 0;
-    
-    
-    if(cases_picked == 5)
-        multiplier = .20;
-    else if(cases_picked == 8)
-        multiplier = .28;
-    else if(cases_picked == 10)
-        multiplier = .36;
-    else if(cases_picked == 11)
-        multiplier = .42;
-        
-    for(int i=0; i<12; i++){
-        if(isOpen[i])
-            offer += case_values[i];
-    }
-    
-    offer = (int) multiplier * (offer/cases_picked);
-    
-    return offer;
-}
-
-volatile bool stateTrigger;       // true if hit , false if released
-volatile int buttonValue;         // value of the pin touched.
- 
- 
-// Key hit/release interrupt routine for MPR121
-void fallInterrupt() {
-//Only read the device when the previous interrupt has been handled by main 
-  if (stateTrigger == false) {   // test global variable
-
-    buttonValue = mpr121.read(0x00);    
-    buttonValue += mpr121.read(0x01)<<8;
- 
-    stateTrigger = true;   // set global variable
-  }
-}
-
-//initialize case values
-void Case_Init()
-{
-    int num;
-    //int case_values[12];
-    int A[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    
-    bool done = 0;
-    while(done){
-        num = rand() % 12 + 1;
-        for(int i=0; i<12; i++){
-            if(A[i] == 0)
-                A[i] = num;
-            else if(A[i] == num)
-                break;
-            else
-                done = 1;
-        }
-    }
-    
-    for(int i=0; i<12; i++)
-        case_values[i] = values[A[i]];
-        
-}
-
+int G_HANDLE_HEIGHT = 1;
+int G_HANDLE_LENGTH = 2;
+int G_CASE_HEIGHT   = 2;
+int G_CASE_LENGTH   = 3;
 void draw_case(int x, int y, int scale, bool gold, bool open){
     int HANDLE_HEIGHT = G_HANDLE_HEIGHT * scale;
     int HANDLE_LENGTH = G_HANDLE_LENGTH * scale;
@@ -137,6 +55,7 @@
         uLCD.line(x-1,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH-1,y,RED);
     }
 }
+
 int text_offset_x = 7;
 int text_offset_y = 4;
 int xPos[] = {0,33,66,99};//,0,33,66,99,0,33,66,99};
@@ -159,13 +78,13 @@
     uLCD.textbackground_color(BLACK);
     uLCD.color(GREEN);
     uLCD.locate(0,13);
-    uLCD.printf("%d cases",cases_to_pick);
+    uLCD.printf("%d cases",3);
     uLCD.locate(0,14);
     uLCD.printf("left in");
     uLCD.locate(0,15);
     uLCD.printf("round");
     uLCD.locate(10,15);
-    uLCD.printf("$%d",current_val);
+    uLCD.printf("$%d",1000);
 }
 void flashCase(int caseNum){
     int i = caseNum - 1;
@@ -188,6 +107,10 @@
     draw_case(xPos[i%4]+text_offset_x,yPos[i/4]+text_offset_y,7,isCase[i],isOpen[i]);
     uLCD.text_string(caseLabel[i],labelCol[i%4],labelRow[i/4], NULL, BLACK);
 }
+
+int values[] = {1,5,10,20,50,100,250,500,1000,2500,5000,10000};
+char* valuesStr[] = {"1","5","10","20","50","100","$ 250","$ 500","$  1k","$2.5k","$  5k","$ 10k"};
+bool valueOpen[]= {true,false,true,false,true,false,true,false,false,true,false,false};
 void draw_banker_screen(void){
     //uLCD.locate(0,0);
     //uLCD.printf("test");
@@ -207,107 +130,59 @@
     uLCD.locate(0,8);
     uLCD.printf("The banker's");
     uLCD.locate(0,9);
-    uLCD.printf("offer is: $%d",bankOfferGen());
+    uLCD.printf("offer is: $%d",3784);
 }
+
+volatile int prevVal = 0;
+// Key hit/release interrupt routine for MPR121
+void fallInterrupt() {
  
+//Only read the device when the previous interrupt has been handled by main
+ 
+  if (stateTrigger == false) {   // test global variable
+    prevVal = buttonValue;
+    buttonValue = mpr121.read(0x00);    
+    buttonValue += mpr121.read(0x01)<<8;
+    if(((buttonValue != prevVal) && buttonValue != 0) || (buttonValue ==0 && prevVal == 0))
+    stateTrigger = true;   // set global variable
+  }
+}
+
 int main() {
-    stateTrigger = false;   
-    buttonValue = 0;  
-    Case_Init();
-    interrupt.mode(PullUp);
-    interrupt.fall(&fallInterrupt);
-    round0();
-    while (1) {
-    int key_code=0;
-    int i=0;
-    for (i=0; i<12; i++) {
-    if (((buttonValue>>i)&0x01)==1) key_code=i;
-    }  
-    if (stateTrigger == true && key_code >-1 && key_code < 12) {
-    led1=led2=led3=led4=1;
-    
-    /*led4=key_code & 0x01;
-    led3=(key_code>>1) & 0x01;
-    led2=(key_code>>2) & 0x01;
-    led1=(key_code>>3) & 0x01;*/
-    
-    //pick initial case
-    if(cases_picked == 0)
-        isCase[key_code] = 1;
+    //uLCD.baudrate(299999);
+    //draw_case_grid();
+    //wait(2);
+    //flashCase(2);    
+    //draw_banker_screen();
     
-    //check to see if that case has been picked
-/*    for(int i=0; i<12; i++){
-        if(cases_picked == 0)
-            picked = 0;
-        else if(isOpen[i] == 1)
-            picked = 1;
-        else
-            picked = 0;
-    }*/
-    uLCD.locate(0, 0);
-    uLCD.printf("%d",key_code);
-    if(!isOpen[key_code]){
-        //uLCD.locate(0, 2);
-        //uLCD.printf("reach 2");
-        cases_picked += 1;
-        cases_to_pick -= 1;
-            if(cases_picked != 1){
-                current_val = case_values[key_code];
-                isOpen[key_code] = 1;
-            if(case_values[key_code] == 1)
-                valueOpen[0] = 1;
-            else if(case_values[key_code] == 5)
-                valueOpen[1] = 1;
-            else if(case_values[key_code] == 10)
-                valueOpen[2] = 1;
-            else if(case_values[key_code] == 20)
-                valueOpen[3] = 1;
-            else if(case_values[key_code] == 50)
-                valueOpen[4] = 1;
-            else if(case_values[key_code] == 100)
-                valueOpen[5] = 1;
-            else if(case_values[key_code] == 250)
-                valueOpen[6] = 1;
-            else if(case_values[key_code] == 500)
-                valueOpen[7] = 1;
-            else if(case_values[key_code] == 1000)
-                valueOpen[8] = 1;
-            else if(case_values[key_code] == 2500)
-                valueOpen[9] = 1;
-            else if(case_values[key_code] == 5000)
-                valueOpen[10] = 1;
-            else if(case_values[key_code] == 10000)
-                valueOpen[11] = 1;
-            }
-        //uLCD.locate(0, 4);
-        //uLCD.printf("reach 3");
-        //draw_case_grid();
+//int main() {
+    stateTrigger = false;   
+    buttonValue = 0;             
+ 
+    interrupt.mode(PullUp);              
+    interrupt.fall(&fallInterrupt);            // Attach interrupt and its mode respectively.
+    draw_case_grid(); 
+    while (1) {
+    //Test for state change
+    if (stateTrigger == true) {
+        int key_code=0;
+        int i=0;
+        int value=mpr121.read(0x00);
+        value +=mpr121.read(0x01)<<8;
+        // LED demo mod
+        // puts key number out to LEDs for demo
+        for (i=0; i<12; i++) {
+            if (((value>>i)&0x01)==1) key_code=i;
+        }
+        led4=key_code & 0x01;
+        led3=(key_code>>1) & 0x01;
+        led2=(key_code>>2) & 0x01;
+        led1=(key_code>>3) & 0x01;
+        
+        isCase[key_code] = true;
         draw_single_case(key_code+1);
-    }
-    else
-        flashCase(key_code);
-        //flash picked case with red border
-        
-    if(cases_picked == 1)
-        cases_to_pick = 4;
-    else if(cases_picked == 5){
-        cases_to_pick = 3;
-        draw_banker_screen();
-    }
-    else if(cases_picked == 8){
-        cases_to_pick = 2;
-        draw_banker_screen();
-    }
-    else if(cases_picked == 10){
-        cases_to_pick = 1;
-        draw_banker_screen();
-    }
-    else if(cases_picked == 11){
-        cases_to_pick = 1;
-        draw_banker_screen();
-    }
-    }
-    stateTrigger = false;
-    led1=led2=led3=led4=0;
-    }
-}
\ No newline at end of file
+            
+        stateTrigger = false; //main is done, release interrupt handler for next button
+        }
+    }// while
+}// main
\ No newline at end of file