Overview: The project is simple interactive game which utilized accelerometer to reading real time data and convert data into score. The project has one main cpp file and four header files. Four header files contain functions and variables to run the project.

Dependencies:   MMA8452 N5110 PowerControl beep mbed

Committer:
stevenle93
Date:
Sun May 10 17:21:39 2015 +0000
Revision:
9:522f9311ff4b
Parent:
8:aebb468546c5
Changes: all header file are documented, changing in debounce function of all the buttons, little change with condition of putting mbed into sleep mode.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stevenle93 1:92f77de19aad 1 /**
stevenle93 1:92f77de19aad 2 @file Game.h
stevenle93 1:92f77de19aad 3 @brief Header file of the game rule which contain member functions, variables and functions definition
stevenle93 9:522f9311ff4b 4 @brief Revision 1.0
stevenle93 9:522f9311ff4b 5 @author Huynh Minh Tuan Le
stevenle93 9:522f9311ff4b 6 @date April 2015
stevenle93 1:92f77de19aad 7 */
stevenle93 1:92f77de19aad 8
stevenle93 1:92f77de19aad 9 #ifndef GAME_H
stevenle93 1:92f77de19aad 10 #define GAME_H
stevenle93 1:92f77de19aad 11
stevenle93 1:92f77de19aad 12 #include "mbed.h"
stevenle93 1:92f77de19aad 13 #include "MMA8452.h"
stevenle93 1:92f77de19aad 14 #include "N5110.h"
stevenle93 2:57d1ed1f0ad3 15 #include "Clock.h"
stevenle93 1:92f77de19aad 16
stevenle93 9:522f9311ff4b 17
stevenle93 9:522f9311ff4b 18 Ticker gatimer; ///< Set a ticker for the game timing
stevenle93 9:522f9311ff4b 19 int gatimerFlag = 0; ///< Declare game ISR flag as a integer type variable
stevenle93 3:1974db5993ef 20
stevenle93 3:1974db5993ef 21 void gatimerExpired()
stevenle93 3:1974db5993ef 22 {
stevenle93 9:522f9311ff4b 23 gatimerFlag = 1; ///Set flag for timer of the game
stevenle93 3:1974db5993ef 24 }
stevenle93 1:92f77de19aad 25
stevenle93 9:522f9311ff4b 26 ///Game Class
stevenle93 1:92f77de19aad 27 class Game
stevenle93 1:92f77de19aad 28 {
stevenle93 1:92f77de19aad 29 private:
stevenle93 1:92f77de19aad 30 /**
stevenle93 9:522f9311ff4b 31 * The acceleration variable recalled from MMA8452.h
stevenle93 1:92f77de19aad 32 */
stevenle93 9:522f9311ff4b 33 Acceleration accel; ///Acceleration variable declared in MMA8452 class
stevenle93 1:92f77de19aad 34
stevenle93 1:92f77de19aad 35 public:
stevenle93 1:92f77de19aad 36 /**
stevenle93 9:522f9311ff4b 37 * A function that contains condition of easy mode.
stevenle93 9:522f9311ff4b 38 * The conditions: Threshold value of 2g - Time interval for reading data of 0.1s.
stevenle93 1:92f77de19aad 39 */
stevenle93 3:1974db5993ef 40 void easyMode();
stevenle93 5:c0a58a6916f2 41 /**
stevenle93 9:522f9311ff4b 42 * A function that contains condition of normal mode.
stevenle93 9:522f9311ff4b 43 * The conditions: Threshold value of 3g - Time interval for reading data of 0.2s.
stevenle93 5:c0a58a6916f2 44 */
stevenle93 3:1974db5993ef 45 void norMode();
stevenle93 5:c0a58a6916f2 46 /**
stevenle93 9:522f9311ff4b 47 * A functionthat contains condition of hard mode.
stevenle93 9:522f9311ff4b 48 * The conditions: Threshold value of 3g - Time interval for reading data of 0.4s.
stevenle93 5:c0a58a6916f2 49 */
stevenle93 3:1974db5993ef 50 void hardMode();
stevenle93 5:c0a58a6916f2 51 /**
stevenle93 9:522f9311ff4b 52 * A global variable to store play score.
stevenle93 9:522f9311ff4b 53 * This score will later transfer into an array.
stevenle93 5:c0a58a6916f2 54 */
stevenle93 4:c141e252d786 55 int score;
stevenle93 5:c0a58a6916f2 56 /**
stevenle93 9:522f9311ff4b 57 * An array to store set of scores.
stevenle93 9:522f9311ff4b 58 * The array structure is as follow:
stevenle93 9:522f9311ff4b 59 * Easy high score, Easy current score, Normal high score, Normal current score, Hard high score, Hard current score.
stevenle93 5:c0a58a6916f2 60 */
stevenle93 4:c141e252d786 61 int scoArr[6];
stevenle93 5:c0a58a6916f2 62 /**
stevenle93 9:522f9311ff4b 63 * A function used to reset the game condition.
stevenle93 5:c0a58a6916f2 64 */
stevenle93 3:1974db5993ef 65 void reset();
stevenle93 5:c0a58a6916f2 66 /**
stevenle93 9:522f9311ff4b 67 * A funtion to draw a battery image when playing game.
stevenle93 5:c0a58a6916f2 68 */
stevenle93 5:c0a58a6916f2 69 void battImag();
stevenle93 1:92f77de19aad 70 };
stevenle93 1:92f77de19aad 71
stevenle93 3:1974db5993ef 72 void Game::easyMode ()
stevenle93 1:92f77de19aad 73 {
stevenle93 5:c0a58a6916f2 74 lcd.printString("EASY MODE",16,0); //Displaying the title of difficulty level
stevenle93 5:c0a58a6916f2 75 lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image
stevenle93 5:c0a58a6916f2 76 lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image
stevenle93 3:1974db5993ef 77 if (gatimerFlag) {
stevenle93 3:1974db5993ef 78 gatimerFlag = 0;
stevenle93 3:1974db5993ef 79 accel = mma8452.readValues(); //Read the value from MMA8452 sensor
stevenle93 5:c0a58a6916f2 80
stevenle93 8:aebb468546c5 81 if (accel.y > 2 || accel.y < -2) { //Easy mode: If the value of accelerator data exceed 2g, the score will increase by one unit
stevenle93 3:1974db5993ef 82 score++;
stevenle93 3:1974db5993ef 83 char scorebuffer[14];
stevenle93 4:c141e252d786 84 sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number
stevenle93 4:c141e252d786 85 lcd.printString(scorebuffer,6,3);
stevenle93 5:c0a58a6916f2 86 battImag();
stevenle93 1:92f77de19aad 87 }
stevenle93 1:92f77de19aad 88 }
stevenle93 9:522f9311ff4b 89 //Condition for storing "score" and transferring "score" between scoArr elements.
stevenle93 9:522f9311ff4b 90 scoArr[1] = score; //Store "score" variable into 2nd element of scoArr array
stevenle93 9:522f9311ff4b 91 if(scoArr[0] > scoArr[1]) { //If 1st element is greater than 2nd element, store in 2nd element
stevenle93 4:c141e252d786 92 scoArr[1] = score;
stevenle93 9:522f9311ff4b 93 } else if(scoArr[0] < scoArr[1]) { //Vice versa, store in 1st element
stevenle93 4:c141e252d786 94 scoArr[0] = score;
stevenle93 4:c141e252d786 95 }
stevenle93 1:92f77de19aad 96 }
stevenle93 2:57d1ed1f0ad3 97
stevenle93 3:1974db5993ef 98 void Game::norMode()
stevenle93 3:1974db5993ef 99 {
stevenle93 5:c0a58a6916f2 100 lcd.printString("NORMAL MODE",9,0); //Displaying the title of difficulty level
stevenle93 5:c0a58a6916f2 101 lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image
stevenle93 5:c0a58a6916f2 102 lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image
stevenle93 3:1974db5993ef 103 if (gatimerFlag) {
stevenle93 3:1974db5993ef 104 gatimerFlag = 0;
stevenle93 3:1974db5993ef 105 accel = mma8452.readValues(); //Read the value from MMA8452 sensor
stevenle93 5:c0a58a6916f2 106
stevenle93 8:aebb468546c5 107 if (accel.y > 3 || accel.y < -3) { //Normal mode: If the value of accelerator data exceed 3g, the score will increase by one unit
stevenle93 3:1974db5993ef 108 score++;
stevenle93 3:1974db5993ef 109 char scorebuffer[14];
stevenle93 4:c141e252d786 110 sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number
stevenle93 4:c141e252d786 111 lcd.printString(scorebuffer,6,3);
stevenle93 5:c0a58a6916f2 112 battImag();
stevenle93 3:1974db5993ef 113 }
stevenle93 3:1974db5993ef 114 }
stevenle93 9:522f9311ff4b 115 //Condition for storing "score" and transferring "score" between scoArr elements.
stevenle93 9:522f9311ff4b 116 scoArr[3] = score; //Store "score" variable into 4th element of scoArr array
stevenle93 9:522f9311ff4b 117 if(scoArr[2] > scoArr[3]) { //If 3rd element is greater than 4th element, store in 4th element
stevenle93 4:c141e252d786 118 scoArr[3] = score;
stevenle93 9:522f9311ff4b 119 } else if(scoArr[2] < scoArr[3]) { //Vice versa, store in 3rd element
stevenle93 4:c141e252d786 120 scoArr[2] = score;
stevenle93 4:c141e252d786 121 }
stevenle93 3:1974db5993ef 122 }
stevenle93 3:1974db5993ef 123
stevenle93 3:1974db5993ef 124 void Game::hardMode()
stevenle93 3:1974db5993ef 125 {
stevenle93 5:c0a58a6916f2 126 lcd.printString("HARD MODE",16,0); //Displaying the title of difficulty level
stevenle93 5:c0a58a6916f2 127 lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image
stevenle93 5:c0a58a6916f2 128 lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image
stevenle93 3:1974db5993ef 129 if (gatimerFlag) {
stevenle93 3:1974db5993ef 130 gatimerFlag = 0;
stevenle93 3:1974db5993ef 131 accel = mma8452.readValues(); //Read the value from MMA8452 sensor
stevenle93 5:c0a58a6916f2 132
stevenle93 8:aebb468546c5 133 if (accel.y > 3.5 || accel.y < -3.5) { //Hard mode: If the value of accelerator data exceed 3.5g, the score will increase by one unit
stevenle93 3:1974db5993ef 134 score++;
stevenle93 3:1974db5993ef 135 char scorebuffer[14];
stevenle93 4:c141e252d786 136 sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number
stevenle93 4:c141e252d786 137 lcd.printString(scorebuffer,6,3);
stevenle93 5:c0a58a6916f2 138 battImag();
stevenle93 3:1974db5993ef 139 }
stevenle93 3:1974db5993ef 140 }
stevenle93 9:522f9311ff4b 141 //Condition for storing "score" and transferring "score" between scoArr elements.
stevenle93 9:522f9311ff4b 142 scoArr[5] = score; //Store "score" variable into 6th element of scoArr array
stevenle93 9:522f9311ff4b 143 if(scoArr[4] > scoArr[5]) { //If 5th element is greater than 6th element, store in 6th element
stevenle93 4:c141e252d786 144 scoArr[5] = score;
stevenle93 9:522f9311ff4b 145 } else if(scoArr[4] < scoArr[5]) { //Vice versa, store in 5th element
stevenle93 4:c141e252d786 146 scoArr[4] = score;
stevenle93 4:c141e252d786 147 }
stevenle93 3:1974db5993ef 148 }
stevenle93 3:1974db5993ef 149
stevenle93 3:1974db5993ef 150 void Game::reset()
stevenle93 2:57d1ed1f0ad3 151 {
stevenle93 2:57d1ed1f0ad3 152 score = 0;
stevenle93 2:57d1ed1f0ad3 153 CClock = 60;
stevenle93 2:57d1ed1f0ad3 154 }
stevenle93 3:1974db5993ef 155
stevenle93 5:c0a58a6916f2 156 void Game::battImag()
stevenle93 5:c0a58a6916f2 157 {
stevenle93 5:c0a58a6916f2 158 if (score>20 && score<40) {
stevenle93 5:c0a58a6916f2 159 lcd.drawRect(32,34,3,8,1);
stevenle93 5:c0a58a6916f2 160 }
stevenle93 5:c0a58a6916f2 161 if (score>40 && score<60) {
stevenle93 5:c0a58a6916f2 162 lcd.drawRect(32,34,6,8,1);
stevenle93 5:c0a58a6916f2 163 }
stevenle93 5:c0a58a6916f2 164 if (score>60 && score<80) {
stevenle93 5:c0a58a6916f2 165 lcd.drawRect(32,34,9,8,1);
stevenle93 5:c0a58a6916f2 166 }
stevenle93 5:c0a58a6916f2 167 if (score>80 && score<100) {
stevenle93 5:c0a58a6916f2 168 lcd.drawRect(32,34,12,8,1);
stevenle93 5:c0a58a6916f2 169 }
stevenle93 5:c0a58a6916f2 170 if (score>100 && score<120) {
stevenle93 5:c0a58a6916f2 171 lcd.drawRect(32,34,15,8,1);
stevenle93 5:c0a58a6916f2 172 }
stevenle93 5:c0a58a6916f2 173 if (score>120 && score<140) {
stevenle93 5:c0a58a6916f2 174 lcd.drawRect(32,34,18,8,1);
stevenle93 5:c0a58a6916f2 175 }
stevenle93 5:c0a58a6916f2 176 if (score>140 && score<160) {
stevenle93 5:c0a58a6916f2 177 lcd.drawRect(32,34,21,8,1);
stevenle93 5:c0a58a6916f2 178 }
stevenle93 5:c0a58a6916f2 179 if (score>160) {
stevenle93 5:c0a58a6916f2 180 lcd.drawRect(32,34,24,8,1);
stevenle93 5:c0a58a6916f2 181 }
stevenle93 5:c0a58a6916f2 182 }
stevenle93 5:c0a58a6916f2 183
stevenle93 5:c0a58a6916f2 184
stevenle93 1:92f77de19aad 185 #endif