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

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed wave_player

Committer:
AlexFerrara
Date:
Mon Oct 31 18:33:46 2016 +0000
Revision:
6:a487ee40d30c
Parent:
5:610461a90e3a
Gatech ECE 4180 Lab 4 Deal or No Deal Game; -Alex Ferrara; -Luke LeFeve

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AlexFerrara 4:1c7f2541afc1 1 #include "mbed.h"
AlexFerrara 4:1c7f2541afc1 2 #include "uLCD_4DGL.h"
AlexFerrara 6:a487ee40d30c 3 #include "SDFileSystem.h"
AlexFerrara 6:a487ee40d30c 4 #include "wave_player.h"
AlexFerrara 3:0d3cadcd159b 5 #include <mpr121.h>
AlexFerrara 6:a487ee40d30c 6 #include <algorithm>
AlexFerrara 3:0d3cadcd159b 7 DigitalOut led1(LED1);
AlexFerrara 3:0d3cadcd159b 8 DigitalOut led2(LED2);
AlexFerrara 3:0d3cadcd159b 9 DigitalOut led3(LED3);
AlexFerrara 3:0d3cadcd159b 10 DigitalOut led4(LED4);
AlexFerrara 6:a487ee40d30c 11 DigitalIn pb1(p11);
AlexFerrara 6:a487ee40d30c 12 DigitalIn pb2(p12);
AlexFerrara 6:a487ee40d30c 13 FILE *wave_file;
AlexFerrara 6:a487ee40d30c 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
AlexFerrara 6:a487ee40d30c 15 AnalogOut DACout(p18);
AlexFerrara 6:a487ee40d30c 16 wave_player waver(&DACout);
AlexFerrara 6:a487ee40d30c 17 bool offer;
AlexFerrara 6:a487ee40d30c 18 int myCaseKeyCode = 0;
AlexFerrara 4:1c7f2541afc1 19 volatile bool stateTrigger; // true if hit , false if released
AlexFerrara 4:1c7f2541afc1 20 volatile int buttonValue; // value of the pin touched.
AlexFerrara 6:a487ee40d30c 21 int key_code;
AlexFerrara 0:a9fc9a400a0a 22 void draw_case(int x, int y);
AlexFerrara 0:a9fc9a400a0a 23 void draw_case_grid(void);
AlexFerrara 6:a487ee40d30c 24 void draw_grid_info(void);
AlexFerrara 1:13d194e38ea6 25 void draw_single_case(int caseNum);
AlexFerrara 1:13d194e38ea6 26 void flashCase(int caseNum);
AlexFerrara 1:13d194e38ea6 27 void draw_banker_screen(void);
AlexFerrara 6:a487ee40d30c 28 void Case_Init(void);
AlexFerrara 6:a487ee40d30c 29 void start_screen(void);
AlexFerrara 6:a487ee40d30c 30 int bankOfferGen(void);
AlexFerrara 4:1c7f2541afc1 31 uLCD_4DGL uLCD(p28,p27,p30);
AlexFerrara 4:1c7f2541afc1 32 bool isCase[] = {false,false,false,false,false,false,false,false,false,false,false,false};
AlexFerrara 4:1c7f2541afc1 33 bool isOpen[] = {false,false,false,false,false,false,false,false,false,false,false,false};
AlexFerrara 6:a487ee40d30c 34 int case_values[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
AlexFerrara 6:a487ee40d30c 35 int prizes[] = {0, 5, 10, 20, 50, 100, 250, 500, 1000, 2500, 5000, 10000};
AlexFerrara 6:a487ee40d30c 36 int current_value = 4;
AlexFerrara 6:a487ee40d30c 37 int num_cases_picked = 0;
AlexFerrara 6:a487ee40d30c 38 int num_cases_to_pick = 6;
AlexFerrara 3:0d3cadcd159b 39 // Create the interrupt receiver object on pin 26
AlexFerrara 3:0d3cadcd159b 40 InterruptIn interrupt(p26);
AlexFerrara 3:0d3cadcd159b 41
AlexFerrara 3:0d3cadcd159b 42 // Setup the i2c bus on pins 9 and 10
AlexFerrara 3:0d3cadcd159b 43 I2C i2c(p9, p10);
AlexFerrara 3:0d3cadcd159b 44
AlexFerrara 3:0d3cadcd159b 45 // Setup the Mpr121:
AlexFerrara 3:0d3cadcd159b 46 // constructor(i2c object, i2c address of the mpr121)
AlexFerrara 3:0d3cadcd159b 47 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
AlexFerrara 3:0d3cadcd159b 48
AlexFerrara 6:a487ee40d30c 49 void start_screen(){
AlexFerrara 6:a487ee40d30c 50 uLCD.media_init();
AlexFerrara 6:a487ee40d30c 51 uLCD.set_sector_address(0x003B, 0x9000);
AlexFerrara 6:a487ee40d30c 52 uLCD.display_image(0,0);
AlexFerrara 6:a487ee40d30c 53 uLCD.locate(1, 12);
AlexFerrara 6:a487ee40d30c 54 uLCD.text_mode(TRANSPARENT);
AlexFerrara 6:a487ee40d30c 55 uLCD.printf("Press Deal Button to Start");
AlexFerrara 6:a487ee40d30c 56 wave_file=fopen("/sd/theme.wav","r");
AlexFerrara 6:a487ee40d30c 57 waver.play(wave_file);
AlexFerrara 6:a487ee40d30c 58 fclose(wave_file);
AlexFerrara 6:a487ee40d30c 59 while(pb1 == 1){};
AlexFerrara 6:a487ee40d30c 60 uLCD.cls();
AlexFerrara 6:a487ee40d30c 61 uLCD.set_sector_address(0x003B, 0x9041);
AlexFerrara 6:a487ee40d30c 62 uLCD.display_image(0,0);
AlexFerrara 6:a487ee40d30c 63 uLCD.text_mode(OPAQUE);
AlexFerrara 6:a487ee40d30c 64 }
AlexFerrara 6:a487ee40d30c 65
AlexFerrara 4:1c7f2541afc1 66 int G_HANDLE_HEIGHT = 1;
AlexFerrara 4:1c7f2541afc1 67 int G_HANDLE_LENGTH = 2;
AlexFerrara 4:1c7f2541afc1 68 int G_CASE_HEIGHT = 2;
AlexFerrara 4:1c7f2541afc1 69 int G_CASE_LENGTH = 3;
AlexFerrara 1:13d194e38ea6 70 void draw_case(int x, int y, int scale, bool gold, bool open){
AlexFerrara 0:a9fc9a400a0a 71 int HANDLE_HEIGHT = G_HANDLE_HEIGHT * scale;
AlexFerrara 0:a9fc9a400a0a 72 int HANDLE_LENGTH = G_HANDLE_LENGTH * scale;
AlexFerrara 0:a9fc9a400a0a 73 int CASE_HEIGHT = G_CASE_HEIGHT * scale;
AlexFerrara 0:a9fc9a400a0a 74 int CASE_LENGTH = G_CASE_LENGTH * scale;
AlexFerrara 0:a9fc9a400a0a 75 int HANDLE_OFFSET = (CASE_LENGTH - HANDLE_LENGTH) /2;
AlexFerrara 1:13d194e38ea6 76 int c1,c2,c3;
AlexFerrara 1:13d194e38ea6 77 (gold) ? (c1=0xfff08c) : (c1=LGREY);
AlexFerrara 1:13d194e38ea6 78 (gold) ? (c2=0xc99700) : (c2=DGREY);
AlexFerrara 1:13d194e38ea6 79 (gold) ? (c3= 0xFFDF00) : (c3=WHITE);
AlexFerrara 0:a9fc9a400a0a 80 //handle
AlexFerrara 1:13d194e38ea6 81 uLCD.rectangle(x+HANDLE_OFFSET, y, x+HANDLE_OFFSET+HANDLE_LENGTH, y+HANDLE_HEIGHT, c1);
AlexFerrara 0:a9fc9a400a0a 82 //main section
AlexFerrara 1:13d194e38ea6 83 uLCD.filled_rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, c3);
AlexFerrara 1:13d194e38ea6 84 uLCD.rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, c2);
AlexFerrara 0:a9fc9a400a0a 85 //uLCD.printf("%d, %d",x+HANDLE_HEIGHT+(CASE_HEIGHT/2), y+CASE_LENGTH/2);
AlexFerrara 1:13d194e38ea6 86 if(open){
AlexFerrara 1:13d194e38ea6 87 uLCD.line(x,y,x+CASE_LENGTH,y+HANDLE_HEIGHT+CASE_HEIGHT,RED);
AlexFerrara 1:13d194e38ea6 88 uLCD.line(x+1,y,x+CASE_LENGTH+1,y+HANDLE_HEIGHT+CASE_HEIGHT,RED);
AlexFerrara 1:13d194e38ea6 89 uLCD.line(x-1,y,x+CASE_LENGTH-1,y+HANDLE_HEIGHT+CASE_HEIGHT,RED);
AlexFerrara 0:a9fc9a400a0a 90
AlexFerrara 1:13d194e38ea6 91 uLCD.line(x,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH,y,RED);
AlexFerrara 1:13d194e38ea6 92 uLCD.line(x+1,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH+1,y,RED);
AlexFerrara 1:13d194e38ea6 93 uLCD.line(x-1,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH-1,y,RED);
AlexFerrara 1:13d194e38ea6 94 }
AlexFerrara 0:a9fc9a400a0a 95 }
AlexFerrara 4:1c7f2541afc1 96
AlexFerrara 1:13d194e38ea6 97 int text_offset_x = 7;
AlexFerrara 1:13d194e38ea6 98 int text_offset_y = 4;
AlexFerrara 1:13d194e38ea6 99 int xPos[] = {0,33,66,99};//,0,33,66,99,0,33,66,99};
AlexFerrara 1:13d194e38ea6 100 int yPos[] = {0,33,66};//0,0,0,33,33,33,33,66,66,66,66};
AlexFerrara 1:13d194e38ea6 101 char* caseLabel[] = {"1"," 2"," 3","4","5"," 6"," 7","8","9","10","11","12"};
AlexFerrara 1:13d194e38ea6 102 int labelCol[] = {2,6,11,16};//,2,6,11,16,2,6,11,16};
AlexFerrara 1:13d194e38ea6 103 int labelRow[] = {2,6,10};//2,2,2,6,6,6,6,10,10,10,10};
AlexFerrara 1:13d194e38ea6 104 void draw_case_grid(void){
AlexFerrara 1:13d194e38ea6 105 //draw 12 case grid
AlexFerrara 1:13d194e38ea6 106 for(int i=0; i<12; i++){
AlexFerrara 1:13d194e38ea6 107 uLCD.text_mode(TRANSPARENT);
AlexFerrara 1:13d194e38ea6 108 draw_case(xPos[i%4]+text_offset_x,yPos[i/4]+text_offset_y,7,isCase[i],isOpen[i]);
AlexFerrara 1:13d194e38ea6 109 uLCD.text_string(caseLabel[i],labelCol[i%4],labelRow[i/4], NULL, BLACK);
AlexFerrara 1:13d194e38ea6 110 }
AlexFerrara 1:13d194e38ea6 111 uLCD.text_mode(OPAQUE);
AlexFerrara 1:13d194e38ea6 112 draw_case(60,100,9, false, false);
AlexFerrara 6:a487ee40d30c 113 /*uLCD.locate(9,14);
AlexFerrara 1:13d194e38ea6 114 uLCD.textbackground_color(WHITE);
AlexFerrara 6:a487ee40d30c 115 uLCD.printf("%d",12);*/
AlexFerrara 1:13d194e38ea6 116 uLCD.textbackground_color(BLACK);
AlexFerrara 1:13d194e38ea6 117 uLCD.color(GREEN);
AlexFerrara 1:13d194e38ea6 118 uLCD.locate(0,13);
AlexFerrara 6:a487ee40d30c 119 uLCD.printf("%d cases",num_cases_to_pick-1);
AlexFerrara 1:13d194e38ea6 120 uLCD.locate(0,14);
AlexFerrara 6:a487ee40d30c 121 uLCD.printf("left to");
AlexFerrara 1:13d194e38ea6 122 uLCD.locate(0,15);
AlexFerrara 6:a487ee40d30c 123 uLCD.printf("pick");
AlexFerrara 6:a487ee40d30c 124 /*uLCD.locate(10,15);
AlexFerrara 6:a487ee40d30c 125 uLCD.printf("$%d",current_value);*/
AlexFerrara 1:13d194e38ea6 126 }
AlexFerrara 1:13d194e38ea6 127 void flashCase(int caseNum){
AlexFerrara 1:13d194e38ea6 128 int i = caseNum - 1;
AlexFerrara 1:13d194e38ea6 129 int scale = 8;
AlexFerrara 1:13d194e38ea6 130 int tempX = xPos[i%4]+text_offset_x-1;
AlexFerrara 1:13d194e38ea6 131 int tempY = yPos[i/4]+text_offset_y-1;
AlexFerrara 1:13d194e38ea6 132 int HANDLE_HEIGHT = G_HANDLE_HEIGHT * scale;
AlexFerrara 1:13d194e38ea6 133 int CASE_HEIGHT = G_CASE_HEIGHT * scale;
AlexFerrara 1:13d194e38ea6 134 int CASE_LENGTH = G_CASE_LENGTH * scale;
AlexFerrara 1:13d194e38ea6 135 for(int j=0;j<2;j++){
AlexFerrara 1:13d194e38ea6 136 uLCD.filled_rectangle(tempX,tempY,tempX+CASE_LENGTH+2,tempY+CASE_HEIGHT+HANDLE_HEIGHT+2,BLACK);
AlexFerrara 1:13d194e38ea6 137 wait(0.2);
AlexFerrara 1:13d194e38ea6 138 draw_single_case(i+1);
AlexFerrara 1:13d194e38ea6 139 wait(0.2);
AlexFerrara 1:13d194e38ea6 140 }
AlexFerrara 1:13d194e38ea6 141 }
AlexFerrara 1:13d194e38ea6 142 void draw_single_case(int caseNum){
AlexFerrara 1:13d194e38ea6 143 int i = caseNum-1;
AlexFerrara 1:13d194e38ea6 144 uLCD.text_mode(TRANSPARENT);
AlexFerrara 1:13d194e38ea6 145 draw_case(xPos[i%4]+text_offset_x,yPos[i/4]+text_offset_y,7,isCase[i],isOpen[i]);
AlexFerrara 1:13d194e38ea6 146 uLCD.text_string(caseLabel[i],labelCol[i%4],labelRow[i/4], NULL, BLACK);
AlexFerrara 1:13d194e38ea6 147 }
AlexFerrara 6:a487ee40d30c 148 void draw_grid_info(){
AlexFerrara 6:a487ee40d30c 149 //update case #, amount, cases left
AlexFerrara 6:a487ee40d30c 150 uLCD.text_mode(OPAQUE);
AlexFerrara 6:a487ee40d30c 151 uLCD.locate(10,15);
AlexFerrara 6:a487ee40d30c 152 uLCD.printf(" ");
AlexFerrara 6:a487ee40d30c 153 draw_case(60,100,9, false, false);
AlexFerrara 6:a487ee40d30c 154 uLCD.locate(9,14);
AlexFerrara 6:a487ee40d30c 155 uLCD.textbackground_color(WHITE);
AlexFerrara 6:a487ee40d30c 156 uLCD.printf("%d",key_code+1);
AlexFerrara 6:a487ee40d30c 157 uLCD.textbackground_color(BLACK);
AlexFerrara 6:a487ee40d30c 158 uLCD.color(GREEN);
AlexFerrara 6:a487ee40d30c 159 uLCD.locate(0,13);
AlexFerrara 6:a487ee40d30c 160 uLCD.printf("%d cases",num_cases_to_pick);
AlexFerrara 6:a487ee40d30c 161 uLCD.locate(0,14);
AlexFerrara 6:a487ee40d30c 162 uLCD.printf("left to");
AlexFerrara 6:a487ee40d30c 163 uLCD.locate(0,15);
AlexFerrara 6:a487ee40d30c 164 uLCD.printf("pick");
AlexFerrara 6:a487ee40d30c 165 uLCD.locate(10,15);
AlexFerrara 6:a487ee40d30c 166 uLCD.printf("$%d",case_values[key_code]);
AlexFerrara 6:a487ee40d30c 167 }
AlexFerrara 4:1c7f2541afc1 168
AlexFerrara 6:a487ee40d30c 169 int values[] = {0,5,10,20,50,100,250,500,1000,2500,5000,10000};
AlexFerrara 6:a487ee40d30c 170 char* valuesStr[] = {"0","5","10","20","50","100","$ 250","$ 500","$ 1k","$2.5k","$ 5k","$ 10k"};
AlexFerrara 6:a487ee40d30c 171 bool valueOpen[]= {false,false,false,false,false,false,false,false,false,false,false,false};
AlexFerrara 6:a487ee40d30c 172 void update_bank_table(void){
AlexFerrara 6:a487ee40d30c 173 for(int i=0;i<12;i++){
AlexFerrara 6:a487ee40d30c 174 if(case_values[key_code] == values[i]){
AlexFerrara 6:a487ee40d30c 175 valueOpen[i] = true;
AlexFerrara 6:a487ee40d30c 176 break;}
AlexFerrara 6:a487ee40d30c 177 }
AlexFerrara 6:a487ee40d30c 178 }
AlexFerrara 1:13d194e38ea6 179 void draw_banker_screen(void){
AlexFerrara 1:13d194e38ea6 180 //uLCD.locate(0,0);
AlexFerrara 1:13d194e38ea6 181 //uLCD.printf("test");
AlexFerrara 6:a487ee40d30c 182 offer = true;
AlexFerrara 1:13d194e38ea6 183 for(int i=0;i<6;i++){
AlexFerrara 1:13d194e38ea6 184 uLCD.locate(0,i);
AlexFerrara 1:13d194e38ea6 185 (valueOpen[i]) ? uLCD.color(RED) : uLCD.color(GREEN);
AlexFerrara 1:13d194e38ea6 186 uLCD.printf("$%d",values[i]);
AlexFerrara 1:13d194e38ea6 187 }
AlexFerrara 1:13d194e38ea6 188 for(int i=6;i<12;i++){
AlexFerrara 1:13d194e38ea6 189 //int j = ((int) log10((double)values[i]) + 1);
AlexFerrara 1:13d194e38ea6 190 uLCD.locate(13,(i-6));
AlexFerrara 1:13d194e38ea6 191 (valueOpen[i]) ? uLCD.color(RED) : uLCD.color(GREEN);
AlexFerrara 1:13d194e38ea6 192 /*char* val;
AlexFerrara 1:13d194e38ea6 193 (values[i]>500) ? val=values[i] : valuesStr[i];*/
AlexFerrara 1:13d194e38ea6 194 uLCD.printf(valuesStr[i]);
AlexFerrara 1:13d194e38ea6 195 }
AlexFerrara 6:a487ee40d30c 196 wave_file=fopen("/sd/banker_calling.wav","r");
AlexFerrara 6:a487ee40d30c 197 waver.play(wave_file);
AlexFerrara 6:a487ee40d30c 198 fclose(wave_file);
AlexFerrara 6:a487ee40d30c 199 uLCD.color(GREEN);
AlexFerrara 1:13d194e38ea6 200 uLCD.locate(0,8);
AlexFerrara 1:13d194e38ea6 201 uLCD.printf("The banker's");
AlexFerrara 1:13d194e38ea6 202 uLCD.locate(0,9);
AlexFerrara 6:a487ee40d30c 203 uLCD.printf("offer is:");
AlexFerrara 6:a487ee40d30c 204 wait(1);
AlexFerrara 6:a487ee40d30c 205 wave_file=fopen("/sd/case_opened.wav","r");
AlexFerrara 6:a487ee40d30c 206 waver.play(wave_file);
AlexFerrara 6:a487ee40d30c 207 fclose(wave_file);
AlexFerrara 6:a487ee40d30c 208 uLCD.printf("$%d",bankOfferGen());
AlexFerrara 6:a487ee40d30c 209
AlexFerrara 6:a487ee40d30c 210 }
AlexFerrara 6:a487ee40d30c 211
AlexFerrara 6:a487ee40d30c 212 //initialize case values
AlexFerrara 6:a487ee40d30c 213 void Case_Init()
AlexFerrara 6:a487ee40d30c 214 {
AlexFerrara 6:a487ee40d30c 215 int A[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
AlexFerrara 6:a487ee40d30c 216 srand(time(0));
AlexFerrara 6:a487ee40d30c 217 random_shuffle(&A[0], &A[12]);
AlexFerrara 6:a487ee40d30c 218
AlexFerrara 6:a487ee40d30c 219 /* num = rand() % 12 + 1;
AlexFerrara 6:a487ee40d30c 220 num = rand() % 12 + 1;
AlexFerrara 6:a487ee40d30c 221 uLCD.locate(0,0);
AlexFerrara 6:a487ee40d30c 222 uLCD.printf("%d", num);*/
AlexFerrara 6:a487ee40d30c 223
AlexFerrara 6:a487ee40d30c 224 for(int i=0; i<12; i++)
AlexFerrara 6:a487ee40d30c 225 case_values[i] = prizes[A[i]];
AlexFerrara 6:a487ee40d30c 226
AlexFerrara 6:a487ee40d30c 227 }
AlexFerrara 6:a487ee40d30c 228
AlexFerrara 6:a487ee40d30c 229 int bankOfferGen(){
AlexFerrara 6:a487ee40d30c 230 float multiplier;
AlexFerrara 6:a487ee40d30c 231 int offer = 0;
AlexFerrara 6:a487ee40d30c 232 if(num_cases_picked == 6)
AlexFerrara 6:a487ee40d30c 233 multiplier = .36;
AlexFerrara 6:a487ee40d30c 234 else if(num_cases_picked == 8)
AlexFerrara 6:a487ee40d30c 235 multiplier = .28;
AlexFerrara 6:a487ee40d30c 236 else if(num_cases_picked == 10)
AlexFerrara 6:a487ee40d30c 237 multiplier = .36;
AlexFerrara 6:a487ee40d30c 238 else if(num_cases_picked == 11)
AlexFerrara 6:a487ee40d30c 239 multiplier = .42;
AlexFerrara 6:a487ee40d30c 240
AlexFerrara 6:a487ee40d30c 241 for(int i=0; i<12; i++){
AlexFerrara 6:a487ee40d30c 242 if(!isOpen[i])
AlexFerrara 6:a487ee40d30c 243 offer += case_values[i];
AlexFerrara 6:a487ee40d30c 244 }
AlexFerrara 6:a487ee40d30c 245
AlexFerrara 6:a487ee40d30c 246 offer = multiplier * (offer/(12 - num_cases_picked));
AlexFerrara 6:a487ee40d30c 247
AlexFerrara 6:a487ee40d30c 248 return offer;
AlexFerrara 1:13d194e38ea6 249 }
AlexFerrara 4:1c7f2541afc1 250
AlexFerrara 4:1c7f2541afc1 251 volatile int prevVal = 0;
AlexFerrara 4:1c7f2541afc1 252 // Key hit/release interrupt routine for MPR121
AlexFerrara 4:1c7f2541afc1 253 void fallInterrupt() {
AlexFerrara 3:0d3cadcd159b 254
AlexFerrara 4:1c7f2541afc1 255 //Only read the device when the previous interrupt has been handled by main
AlexFerrara 6:a487ee40d30c 256 //led1=led2=led3=led4=0;
AlexFerrara 4:1c7f2541afc1 257 if (stateTrigger == false) { // test global variable
AlexFerrara 4:1c7f2541afc1 258 prevVal = buttonValue;
AlexFerrara 4:1c7f2541afc1 259 buttonValue = mpr121.read(0x00);
AlexFerrara 4:1c7f2541afc1 260 buttonValue += mpr121.read(0x01)<<8;
AlexFerrara 4:1c7f2541afc1 261 if(((buttonValue != prevVal) && buttonValue != 0) || (buttonValue ==0 && prevVal == 0))
AlexFerrara 4:1c7f2541afc1 262 stateTrigger = true; // set global variable
AlexFerrara 4:1c7f2541afc1 263 }
AlexFerrara 4:1c7f2541afc1 264 }
AlexFerrara 4:1c7f2541afc1 265
AlexFerrara 0:a9fc9a400a0a 266 int main() {
AlexFerrara 4:1c7f2541afc1 267 //uLCD.baudrate(299999);
AlexFerrara 4:1c7f2541afc1 268 //draw_case_grid();
AlexFerrara 4:1c7f2541afc1 269 //wait(2);
AlexFerrara 4:1c7f2541afc1 270 //flashCase(2);
AlexFerrara 4:1c7f2541afc1 271 //draw_banker_screen();
AlexFerrara 6:a487ee40d30c 272 pb1.mode(PullUp); pb2.mode(PullUp);
AlexFerrara 6:a487ee40d30c 273 start_screen();
AlexFerrara 6:a487ee40d30c 274 Case_Init();
AlexFerrara 4:1c7f2541afc1 275 stateTrigger = false;
AlexFerrara 4:1c7f2541afc1 276 buttonValue = 0;
AlexFerrara 5:610461a90e3a 277 bool round1 = true;
AlexFerrara 4:1c7f2541afc1 278 interrupt.mode(PullUp);
AlexFerrara 4:1c7f2541afc1 279 interrupt.fall(&fallInterrupt); // Attach interrupt and its mode respectively.
AlexFerrara 4:1c7f2541afc1 280 draw_case_grid();
AlexFerrara 4:1c7f2541afc1 281 while (1) {
AlexFerrara 6:a487ee40d30c 282 if(pb1 == 0)
AlexFerrara 6:a487ee40d30c 283 led1 = !led1;
AlexFerrara 6:a487ee40d30c 284 if(pb2 == 0)
AlexFerrara 6:a487ee40d30c 285 led2 = !led2;
AlexFerrara 6:a487ee40d30c 286
AlexFerrara 6:a487ee40d30c 287 while(offer){
AlexFerrara 6:a487ee40d30c 288 //wait for pb to update state as deal or no deal
AlexFerrara 6:a487ee40d30c 289 if(pb1 == 0 ) //deal
AlexFerrara 6:a487ee40d30c 290 {
AlexFerrara 6:a487ee40d30c 291 uLCD.locate(0,12);
AlexFerrara 6:a487ee40d30c 292 uLCD.printf("Congratulations, you have accepted the offer!");
AlexFerrara 6:a487ee40d30c 293 }
AlexFerrara 6:a487ee40d30c 294 if(pb2 == 0 ) //no deal
AlexFerrara 6:a487ee40d30c 295 {
AlexFerrara 6:a487ee40d30c 296 offer=false;
AlexFerrara 6:a487ee40d30c 297 uLCD.locate(0,12);
AlexFerrara 6:a487ee40d30c 298 uLCD.printf("Offer declined. You won $%d",case_values[myCaseKeyCode]);
AlexFerrara 6:a487ee40d30c 299 uLCD.locate(0,14);
AlexFerrara 6:a487ee40d30c 300 uLCD.printf("from your case.");
AlexFerrara 6:a487ee40d30c 301 /*draw_case_grid();
AlexFerrara 6:a487ee40d30c 302 stateTrigger == false; */
AlexFerrara 6:a487ee40d30c 303 }
AlexFerrara 6:a487ee40d30c 304 }
AlexFerrara 4:1c7f2541afc1 305 //Test for state change
AlexFerrara 6:a487ee40d30c 306 //led1=led2=1;
AlexFerrara 6:a487ee40d30c 307 //led3=led4=0;
AlexFerrara 4:1c7f2541afc1 308 if (stateTrigger == true) {
AlexFerrara 6:a487ee40d30c 309 led1=led2=led3=led4=1;
AlexFerrara 6:a487ee40d30c 310
AlexFerrara 6:a487ee40d30c 311 /*while(offer){
AlexFerrara 6:a487ee40d30c 312 //wait for pb to update state as deal or no deal
AlexFerrara 6:a487ee40d30c 313 if(key_code == 8) //deal
AlexFerrara 6:a487ee40d30c 314 {
AlexFerrara 6:a487ee40d30c 315 uLCD.locate(0,13);
AlexFerrara 6:a487ee40d30c 316 uLCD.printf("Congratulations, you have accepted the offer");
AlexFerrara 6:a487ee40d30c 317 stateTrigger == false;
AlexFerrara 6:a487ee40d30c 318 break;
AlexFerrara 6:a487ee40d30c 319 }
AlexFerrara 6:a487ee40d30c 320 if(key_code == 11 ) //no deal
AlexFerrara 6:a487ee40d30c 321 {
AlexFerrara 6:a487ee40d30c 322 offer=false;
AlexFerrara 6:a487ee40d30c 323 uLCD.cls();
AlexFerrara 6:a487ee40d30c 324 draw_case_grid();
AlexFerrara 6:a487ee40d30c 325 stateTrigger == false;
AlexFerrara 6:a487ee40d30c 326 break;
AlexFerrara 6:a487ee40d30c 327 }
AlexFerrara 6:a487ee40d30c 328 }*/
AlexFerrara 6:a487ee40d30c 329
AlexFerrara 6:a487ee40d30c 330
AlexFerrara 6:a487ee40d30c 331
AlexFerrara 6:a487ee40d30c 332 key_code=0;
AlexFerrara 4:1c7f2541afc1 333 int i=0;
AlexFerrara 4:1c7f2541afc1 334 int value=mpr121.read(0x00);
AlexFerrara 4:1c7f2541afc1 335 value +=mpr121.read(0x01)<<8;
AlexFerrara 4:1c7f2541afc1 336 // LED demo mod
AlexFerrara 4:1c7f2541afc1 337 // puts key number out to LEDs for demo
AlexFerrara 4:1c7f2541afc1 338 for (i=0; i<12; i++) {
AlexFerrara 4:1c7f2541afc1 339 if (((value>>i)&0x01)==1) key_code=i;
AlexFerrara 4:1c7f2541afc1 340 }
AlexFerrara 6:a487ee40d30c 341 current_value = case_values[key_code];
AlexFerrara 4:1c7f2541afc1 342 led4=key_code & 0x01;
AlexFerrara 4:1c7f2541afc1 343 led3=(key_code>>1) & 0x01;
AlexFerrara 4:1c7f2541afc1 344 led2=(key_code>>2) & 0x01;
AlexFerrara 4:1c7f2541afc1 345 led1=(key_code>>3) & 0x01;
AlexFerrara 4:1c7f2541afc1 346
AlexFerrara 6:a487ee40d30c 347
AlexFerrara 6:a487ee40d30c 348 /* if(offer && (key_code == 8) ) //deal
AlexFerrara 6:a487ee40d30c 349 {
AlexFerrara 6:a487ee40d30c 350 uLCD.locate(0,13);
AlexFerrara 6:a487ee40d30c 351 uLCD.printf("Congratulations, you have accepted the offer");
AlexFerrara 6:a487ee40d30c 352 }
AlexFerrara 6:a487ee40d30c 353 if(offer && (key_code == 11) ) //no deal
AlexFerrara 6:a487ee40d30c 354 {
AlexFerrara 6:a487ee40d30c 355 offer=false;
AlexFerrara 6:a487ee40d30c 356 uLCD.cls();
AlexFerrara 6:a487ee40d30c 357 draw_case_grid();
AlexFerrara 6:a487ee40d30c 358 stateTrigger == false;
AlexFerrara 6:a487ee40d30c 359 }
AlexFerrara 6:a487ee40d30c 360 */
AlexFerrara 5:610461a90e3a 361 if(round1){
AlexFerrara 5:610461a90e3a 362 isCase[key_code] = true;
AlexFerrara 5:610461a90e3a 363 round1 = false;
AlexFerrara 6:a487ee40d30c 364 myCaseKeyCode = key_code;
AlexFerrara 5:610461a90e3a 365 }
AlexFerrara 5:610461a90e3a 366 else {
AlexFerrara 5:610461a90e3a 367 isOpen[key_code] = true;
AlexFerrara 6:a487ee40d30c 368 draw_grid_info();
AlexFerrara 6:a487ee40d30c 369 /*wait(0.5);
AlexFerrara 6:a487ee40d30c 370 wave_file=fopen("/sd/case_opened.wav","r");
AlexFerrara 6:a487ee40d30c 371 waver.play(wave_file);
AlexFerrara 6:a487ee40d30c 372 fclose(wave_file);*/
AlexFerrara 6:a487ee40d30c 373 update_bank_table();
AlexFerrara 6:a487ee40d30c 374 }
AlexFerrara 6:a487ee40d30c 375 draw_single_case(key_code+1);
AlexFerrara 6:a487ee40d30c 376 num_cases_to_pick -= 1;
AlexFerrara 6:a487ee40d30c 377 num_cases_picked += 1;
AlexFerrara 6:a487ee40d30c 378 if(num_cases_picked>1 && num_cases_to_pick == 0){
AlexFerrara 6:a487ee40d30c 379 wait(2);
AlexFerrara 6:a487ee40d30c 380 uLCD.cls();
AlexFerrara 6:a487ee40d30c 381 uLCD.set_sector_address(0x003B, 0x9041);
AlexFerrara 6:a487ee40d30c 382 uLCD.display_image(0,0);
AlexFerrara 6:a487ee40d30c 383 draw_banker_screen();
AlexFerrara 5:610461a90e3a 384 }
AlexFerrara 5:610461a90e3a 385
AlexFerrara 6:a487ee40d30c 386 //if(num_cases_picked == 1)
AlexFerrara 6:a487ee40d30c 387 // num_cases_to_pick = 4;
AlexFerrara 6:a487ee40d30c 388 if(num_cases_picked == 6)
AlexFerrara 6:a487ee40d30c 389 num_cases_to_pick = 3;
AlexFerrara 6:a487ee40d30c 390 else if(num_cases_picked == 8)
AlexFerrara 6:a487ee40d30c 391 num_cases_to_pick = 2;
AlexFerrara 6:a487ee40d30c 392 else if(num_cases_picked == 10)
AlexFerrara 6:a487ee40d30c 393 num_cases_to_pick = 1;
AlexFerrara 6:a487ee40d30c 394 else if(num_cases_picked == 11)
AlexFerrara 6:a487ee40d30c 395 num_cases_to_pick = 1;
AlexFerrara 6:a487ee40d30c 396
AlexFerrara 4:1c7f2541afc1 397 stateTrigger = false; //main is done, release interrupt handler for next button
AlexFerrara 4:1c7f2541afc1 398 }
AlexFerrara 4:1c7f2541afc1 399 }// while
AlexFerrara 4:1c7f2541afc1 400 }// main