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: N5110 PowerControl mbed
Diff: Game.cpp
- Revision:
- 31:5b4a4d225ab4
- Parent:
- 30:4a03611a3d99
- Child:
- 32:99ca304085e6
diff -r 4a03611a3d99 -r 5b4a4d225ab4 Game.cpp
--- a/Game.cpp Sat May 09 11:46:32 2015 +0000
+++ b/Game.cpp Sat May 09 17:37:40 2015 +0000
@@ -16,11 +16,46 @@
{
StartFlag = 1;
}
+/*
void DirPressed()
{
DirFlag = 1;
}
+*/
+//Joystick functions
+// read default positions of the joystick to calibrate later readings
+void calibrateJoystick()
+{
+ //button.mode(PullDown);
+ // must not move during calibration
+ joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
+ joystick.y0 = yPot;
+}
+void updateJoystick()
+{
+ // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
+ joystick.x = xPot - joystick.x0;
+ joystick.y = yPot - joystick.y0;
+ // read button state
+ //joystick.button = button;
+
+ // calculate direction depending on x,y values
+ // tolerance allows a little lee-way in case joystick not exactly in the stated direction
+ if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+ joystick.direction = Centre;
+ } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+ joystick.direction = Up;
+ } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+ joystick.direction = Down;
+ } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
+ joystick.direction = Right;
+ } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
+ joystick.direction = Left;
+ } else {
+ joystick.direction = Unknown;
+ }
+}
//High score system
@@ -171,18 +206,14 @@
Sleep();
}
- if (DirFlag) {
-
- DirFlag = 0;
-
- if(Up) {
- if(menu > 0) {
- menu--;
- }
- } else if(Down) {
- if(menu < 3) {
- menu++;
- }
+ if (joystick.direction == Up) {
+ if(menu > 0) {
+ menu--;
+ }
+ }
+ if(joystick.direction == Down) {
+ if(menu < 3) {
+ menu++;
}
}
if (ActFlag) {
@@ -217,9 +248,8 @@
}
lcd.refresh();
- if (DirFlag) {
-
- DirFlag = 0;
+
+ if (joystick.direction != Centre) {
bright = !bright;
}
@@ -262,15 +292,14 @@
//RevealMap(); //Uncomment for debugging to view map
- while (1) {
+srand(Noise * 1000000);
- srand(Noise * 1000000);
+PlayerCamera();
+
+ while (1) {
ActFlag = 0;
StartFlag = 0;
- DirFlag = 0;
-
- PlayerCamera();
if (map[px][py] == CHEST) {
Chest();
@@ -290,9 +319,7 @@
Sleep();
- if (DirFlag) {
-
- DirFlag = 0;
+ if (joystick.direction != Centre) {
PlayerMove();
@@ -300,6 +327,9 @@
if (ph < PH_MAX) {
ph++;
}
+
+ PlayerCamera();
+
}
if (rand() % 50 == 0) {
@@ -425,7 +455,6 @@
while (1) {
ActFlag = 0;
StartFlag = 0;
- DirFlag = 0;
lcd.clear();
@@ -449,8 +478,7 @@
lcd.refresh();
Sleep();
- if (DirFlag) {
- DirFlag = 0;
+ if (joystick.direction != Centre) {
menu = !menu;
}
if (ActFlag) {
@@ -647,11 +675,11 @@
Sleep();
}
- if (DirFlag) {
- DirFlag = 0;
- if ((Down || Right) && menu < 3) {
+ if (joystick.direction != Centre) {
+
+ if ((joystick.direction == Down || joystick.direction == Right) && menu < 3) {
menu++;
- } else if ((Up || Left) && menu > 0)
+ } else if ((joystick.direction == Up || joystick.direction == Left) && menu > 0)
menu--;
}
if (ActFlag) {
@@ -681,7 +709,6 @@
}
StartFlag = 0;
ActFlag = 0;
- DirFlag = 0;
}
void DrawMap()
@@ -725,10 +752,6 @@
if (ActFlag) {
ActFlag = 0;
}
- if (DirFlag) {
- DirFlag = 0;
- break;
- }
if (StartFlag) {
StartFlag = 0;
break;
@@ -758,10 +781,6 @@
if (ActFlag) {
ActFlag = 0;
}
- if (DirFlag) {
- DirFlag = 0;
- break;
- }
if (StartFlag) {
StartFlag = 0;
break;
@@ -794,8 +813,6 @@
int r = rand() % 10;
- DirFlag = 0;
-
lcd.clear();
lcd.printString("Do you want to", 0, 1);
lcd.printString("take the", 0, 2);
@@ -827,8 +844,7 @@
} else {
StartFlag = 0;
- DirFlag = 0;
-
+
lcd.clear();
lcd.printString("You leave the", 0, 1);
lcd.printString(ItemList[r].ItemName, 0, 2);
@@ -971,7 +987,6 @@
Sleep();
}
} else { //Leave the potion
- DirFlag = 0;
StartFlag = 0;
lcd.clear();
lcd.printString("You walk away", 0, 0);
@@ -1046,16 +1061,21 @@
int main()
{
+ calibrateJoystick(); // get centred values of joystick
+ pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
+
//Power Saving
PHY_PowerDown();
int result = semihost_powerdown();
- Up.rise(&DirPressed);
- Down.rise(&DirPressed);
- Right.rise(&DirPressed);
- Left.rise(&DirPressed);
- Start.rise(&StartPressed);
- Act.rise(&ActPressed);
+ Start.mode(PullDown);
+ Act.mode(PullDown);
+
+ Start.fall(&StartPressed);
+ Act.fall(&ActPressed);
+
+ Start.mode(PullDown);
+ Act.mode(PullDown);
//Generate random seed
srand(Noise * 1000000);