Gatech ECE 4180 Lab 4 Deal or No Deal Game -Alex Ferrara -Luke LeFeve
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
Diff: main.cpp
- 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