Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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