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:
- 3:0d3cadcd159b
- Parent:
- 1:13d194e38ea6
- Child:
- 4:1c7f2541afc1
diff -r e1941ba59f77 -r 0d3cadcd159b main.cpp --- a/main.cpp Mon Oct 31 06:54:08 2016 +0000 +++ b/main.cpp Mon Oct 31 08:07:57 2016 +0000 @@ -1,19 +1,116 @@ -#include "mbed.h" +#include <mbed.h> +#include <mpr121.h> #include "uLCD_4DGL.h" -#include <math.h> + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +DigitalIn pb1(p8); +uLCD_4DGL uLCD(p28,p27,p30); 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); -uLCD_4DGL uLCD(p28,p27,p30); -bool isCase[] = {false,false,false,true,false,false,false,false,false,false,false,false}; -bool isOpen[] = {false,true,false,false,false,true,false,false,false,true,false,false}; + +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; + +// Create the interrupt receiver object on pin 26 +InterruptIn interrupt(p26); + +// Setup the i2c bus on pins 9 and 10 +I2C i2c(p9, p10); + +// Setup the Mpr121: +// 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]]; + +} + 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; @@ -40,7 +137,6 @@ 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}; @@ -63,13 +159,13 @@ uLCD.textbackground_color(BLACK); uLCD.color(GREEN); uLCD.locate(0,13); - uLCD.printf("%d cases",3); + uLCD.printf("%d cases",cases_to_pick); uLCD.locate(0,14); uLCD.printf("left in"); uLCD.locate(0,15); uLCD.printf("round"); uLCD.locate(10,15); - uLCD.printf("$%d",1000); + uLCD.printf("$%d",current_val); } void flashCase(int caseNum){ int i = caseNum - 1; @@ -92,10 +188,6 @@ 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"); @@ -115,15 +207,107 @@ uLCD.locate(0,8); uLCD.printf("The banker's"); uLCD.locate(0,9); - uLCD.printf("offer is: $%d",3784); + uLCD.printf("offer is: $%d",bankOfferGen()); } - + int main() { - //uLCD.baudrate(299999); - //draw_case_grid(); - //wait(2); - //flashCase(2); + 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; - - 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(); + 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