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: mbed 4DGL-uLCD-SE PinDetect
Revision 7:b5372b042ac7, committed 2018-11-30
- Comitter:
- sralph3
- Date:
- Fri Nov 30 06:50:01 2018 +0000
- Parent:
- 6:7b71038ea3df
- Child:
- 8:137330cfe63d
- Commit message:
- FINAL
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Nov 30 06:33:17 2018 +0000
+++ b/main.cpp Fri Nov 30 06:50:01 2018 +0000
@@ -1,9 +1,10 @@
+// ## MBED INCLUDES ##
#include "uLCD_4DGL.h"
#include "MMA8452.h"
#include "Speaker.h"
#include "PinDetect.h"
-
+// ## CUSTOM INCLUDES ##
#include "SSE.h"
#include "ConcreteAsteroid1.h"
#include "ConcreteAsteroid2.h"
@@ -11,9 +12,10 @@
#include "ConcreteAsteroid4.h"
#include "overlap.h"
+// ## MATH ##
#include <math.h>
-
+// ## CUSTOM DEFINES ##
#define ASTEROID_HEIGHT 12
#define ASTEROID_WIDTH 15
#define SPRITE_MAX 15
@@ -40,15 +42,18 @@
#define B 0x0000FF //BLUE
#define r 0xFF0000 //RED
+// ## VARIOUS MBED INSTANTIATIONS ##
uLCD_4DGL uLCD(p28, p27, p29);
Serial pc(USBTX,USBRX);
-MMA8452 acc(p9, p10, 40000); //instantiate an acc object!
+MMA8452 acc(p9, p10, 40000);
Speaker mySpeaker(p21);
PinDetect pb1(p18);
+// ## GLOBAL VARS FOR BOMB BUTTON ##
bool BombUsed = false;
bool ExplodeAllAsteroids = false;
+// ## SET UP PUSHBUTTON FOR INTURRUPT ##
void pb1_hit_callback (void)
{
if (!BombUsed ){
@@ -57,7 +62,7 @@
mySpeaker.PlayNote(100.0,0.25,0.1);
}
}
-
+// ## SPRITES ##
int asteroid_sprite_1[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
_,_,_,_,X,X,X,X,X,X,X,X,_,_,_,
_,_,_,X,_,_,_,_,_,_,_,_,X,_,_,
@@ -143,45 +148,50 @@
_,S,S,S,S,S,S,S,_,_,
};
+// ## MAIN ##
int main() {
+ // ## SETUP LCD BAUDRATE, PB PULLUP, AND SRAND ##
uLCD.baudrate(300000);
- wait(0.2);
- srand(time(0)); // do this srandcall here ONLY... no where else in the code!
- ScreenObject *AstAry[NUM_ASTEROIDS];
+ wait(0.2);
+ pb1.mode(PullUp);
+ wait(0.1);
+ srand(time(0));
- pb1.mode(PullUp);
- wait(0.1);
- // Setup Interrupt callback function for a pb hit
+ // ## SET PARAMETERS FOR ACCELEROMETER ##
+ acc.setBitDepth(MMA8452::BIT_DEPTH_12);
+ acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
+ acc.setDataRate(MMA8452::RATE_100);
+
+ // ## SETUP INTURRUPT CALLBACK FUNCTION FOR A PB HIT ##
pb1.attach_deasserted(&pb1_hit_callback);
- // Start sampling pb input using interrupt
+ // ## START SAMPLING PB CALLBACK ##
pb1.setSampleFrequency();
+ // ## CREATE ARRAY OF SCREENOBJECTS (AND SHIP) ##
+ ScreenObject *AstAry[NUM_ASTEROIDS];
AstAry[0] = new ConcreteAsteroid1;
AstAry[1] = new ConcreteAsteroid2;
AstAry[2] = new ConcreteAsteroid3;
AstAry[3] = new ConcreteAsteroid4;
-
SSE ship;
-
- //set parameters -- use these and don't change
- acc.setBitDepth(MMA8452::BIT_DEPTH_12);
- acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
- acc.setDataRate(MMA8452::RATE_100);
-
+ // ## SETUP TIME & ELAPSED TIME ##
time_t startTime;
startTime = time(0);
time_t timeElapsed = time(0)-startTime;
+
+ // ## GAME LOOP ##
while (true){
uLCD.cls();
-
+ // ## TAKE TIME ELAPSED, CONVERT TO OUT OF 30SEC, SCALE TO SCREN SIZE ##
timeElapsed = time(0)-startTime;
double t = (double)timeElapsed;
double tw = (t/30)*SCREEN_MAX;
uLCD.filled_rectangle(0, 0 , SCREEN_MAX-ceil(tw) , 5, G);
+ // ## WINNING IF STATEMENT ##
if (timeElapsed >= 30){
mySpeaker.PlayNote(600.0,0.25,0.2);
mySpeaker.PlayNote(800.0,0.25,0.1);
@@ -191,6 +201,7 @@
return 0;
}
+ // ## BOMB IF STATEMENT ##
if (ExplodeAllAsteroids){
for(int i=0; i < NUM_ASTEROIDS; i++){
int rando = (rand() % 4);
@@ -210,6 +221,7 @@
ship.update();
+ // ## LOOP THROUGH ASTROID ARY, SEE IF OOB ##
for(int i=0; i < NUM_ASTEROIDS; i++){
AstAry[i]->update();
if(AstAry[i]->outB()){
@@ -226,6 +238,7 @@
}
}
+ // ## LOSING IF STATEMENT ##
if(overlap( ship, *AstAry[i])){
uLCD.BLIT(ship.xpos, ship.ypos, EARTH_WIDTH, EARTH_HEIGHT, exp1);
mySpeaker.PlayNote(800.0,0.25,0.1);