Gatech ECE 4180 Lab 4 Deal or No Deal Game -Alex Ferrara -Luke LeFeve
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
main.cpp
- Committer:
- AlexFerrara
- Date:
- 2016-10-31
- Revision:
- 5:610461a90e3a
- Parent:
- 4:1c7f2541afc1
- Child:
- 6:a487ee40d30c
File content as of revision 5:610461a90e3a:
#include "mbed.h" #include "uLCD_4DGL.h" #include <mpr121.h> DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); 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); 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); // 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); 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; int CASE_HEIGHT = G_CASE_HEIGHT * scale; int CASE_LENGTH = G_CASE_LENGTH * scale; int HANDLE_OFFSET = (CASE_LENGTH - HANDLE_LENGTH) /2; int c1,c2,c3; (gold) ? (c1=0xfff08c) : (c1=LGREY); (gold) ? (c2=0xc99700) : (c2=DGREY); (gold) ? (c3= 0xFFDF00) : (c3=WHITE); //handle uLCD.rectangle(x+HANDLE_OFFSET, y, x+HANDLE_OFFSET+HANDLE_LENGTH, y+HANDLE_HEIGHT, c1); //main section uLCD.filled_rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, c3); uLCD.rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, c2); //uLCD.printf("%d, %d",x+HANDLE_HEIGHT+(CASE_HEIGHT/2), y+CASE_LENGTH/2); if(open){ uLCD.line(x,y,x+CASE_LENGTH,y+HANDLE_HEIGHT+CASE_HEIGHT,RED); uLCD.line(x+1,y,x+CASE_LENGTH+1,y+HANDLE_HEIGHT+CASE_HEIGHT,RED); uLCD.line(x-1,y,x+CASE_LENGTH-1,y+HANDLE_HEIGHT+CASE_HEIGHT,RED); uLCD.line(x,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH,y,RED); uLCD.line(x+1,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH+1,y,RED); 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}; int yPos[] = {0,33,66};//0,0,0,33,33,33,33,66,66,66,66}; char* caseLabel[] = {"1"," 2"," 3","4","5"," 6"," 7","8","9","10","11","12"}; int labelCol[] = {2,6,11,16};//,2,6,11,16,2,6,11,16}; int labelRow[] = {2,6,10};//2,2,2,6,6,6,6,10,10,10,10}; void draw_case_grid(void){ //draw 12 case grid for(int i=0; i<12; i++){ uLCD.text_mode(TRANSPARENT); 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); } uLCD.text_mode(OPAQUE); draw_case(60,100,9, false, false); uLCD.locate(9,14); uLCD.textbackground_color(WHITE); uLCD.printf("%d",12); uLCD.textbackground_color(BLACK); uLCD.color(GREEN); uLCD.locate(0,13); 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",1000); } void flashCase(int caseNum){ int i = caseNum - 1; int scale = 8; int tempX = xPos[i%4]+text_offset_x-1; int tempY = yPos[i/4]+text_offset_y-1; int HANDLE_HEIGHT = G_HANDLE_HEIGHT * scale; int CASE_HEIGHT = G_CASE_HEIGHT * scale; int CASE_LENGTH = G_CASE_LENGTH * scale; for(int j=0;j<2;j++){ uLCD.filled_rectangle(tempX,tempY,tempX+CASE_LENGTH+2,tempY+CASE_HEIGHT+HANDLE_HEIGHT+2,BLACK); wait(0.2); draw_single_case(i+1); wait(0.2); } } void draw_single_case(int caseNum){ int i = caseNum-1; uLCD.text_mode(TRANSPARENT); 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"); for(int i=0;i<6;i++){ uLCD.locate(0,i); (valueOpen[i]) ? uLCD.color(RED) : uLCD.color(GREEN); uLCD.printf("$%d",values[i]); } for(int i=6;i<12;i++){ //int j = ((int) log10((double)values[i]) + 1); uLCD.locate(13,(i-6)); (valueOpen[i]) ? uLCD.color(RED) : uLCD.color(GREEN); /*char* val; (values[i]>500) ? val=values[i] : valuesStr[i];*/ uLCD.printf(valuesStr[i]); } uLCD.locate(0,8); uLCD.printf("The banker's"); uLCD.locate(0,9); 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() { //uLCD.baudrate(299999); //draw_case_grid(); //wait(2); //flashCase(2); //draw_banker_screen(); //int main() { stateTrigger = false; buttonValue = 0; bool round1 = true; 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; if(round1){ isCase[key_code] = true; round1 = false; } else { isOpen[key_code] = true; } draw_single_case(key_code+1); stateTrigger = false; //main is done, release interrupt handler for next button } }// while }// main