Michael McDonald / Mbed 2 deprecated LAME

Dependencies:   mbed 4DGL-uLCD-SE SDFileSystem PinDetect

Committer:
mmcdoanld81
Date:
Mon Apr 25 01:52:31 2022 +0000
Revision:
5:cf8ae4ca6f2b
Parent:
4:9a4d22a279b3
LAME-Michael McDonald

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mmcdoanld81 5:cf8ae4ca6f2b 1 //Michael McDonald-LAME
mmcdoanld81 5:cf8ae4ca6f2b 2
4180_1 0:cc87c48aa43c 3 #include "mbed.h"
4180_1 4:9a4d22a279b3 4 #include "uLCD_4DGL.h"
4180_1 0:cc87c48aa43c 5 #include "PinDetect.h"
4180_1 2:58d85409f7ff 6 #include "Speaker.h"
mmcdoanld81 5:cf8ae4ca6f2b 7 #include "MMA8452.h"
mmcdoanld81 5:cf8ae4ca6f2b 8 #include "lame.h"
mmcdoanld81 5:cf8ae4ca6f2b 9 #include <cstdlib>
mmcdoanld81 5:cf8ae4ca6f2b 10 #include <ctime>
4180_1 0:cc87c48aa43c 11
mmcdoanld81 5:cf8ae4ca6f2b 12 PinDetect pbFire(p22);
mmcdoanld81 5:cf8ae4ca6f2b 13 Serial pc(USBTX,USBRX);
mmcdoanld81 5:cf8ae4ca6f2b 14 uLCD_4DGL uLCD(p9, p10, p11);
mmcdoanld81 5:cf8ae4ca6f2b 15 MMA8452 acc(p28, p27, 40000);
mmcdoanld81 5:cf8ae4ca6f2b 16 Speaker soundOut(p25);
4180_1 2:58d85409f7ff 17
mmcdoanld81 5:cf8ae4ca6f2b 18 //Create my objects
mmcdoanld81 5:cf8ae4ca6f2b 19 Timer timeObject;
mmcdoanld81 5:cf8ae4ca6f2b 20 Ship shipObject;
mmcdoanld81 5:cf8ae4ca6f2b 21 Bullet bulletObject;
4180_1 0:cc87c48aa43c 22
mmcdoanld81 5:cf8ae4ca6f2b 23 // Pushbutton Function
mmcdoanld81 5:cf8ae4ca6f2b 24 void pbFire_hit_callback(void) {
mmcdoanld81 5:cf8ae4ca6f2b 25 soundOut.PlayNote(100, 0.05, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 26 bulletObject.setBullet(true);
mmcdoanld81 5:cf8ae4ca6f2b 27 }
mmcdoanld81 5:cf8ae4ca6f2b 28 // Accelerometer Functions
mmcdoanld81 5:cf8ae4ca6f2b 29 void setupAccelerometer(){
mmcdoanld81 5:cf8ae4ca6f2b 30 acc.setBitDepth(MMA8452::BIT_DEPTH_12);
mmcdoanld81 5:cf8ae4ca6f2b 31 acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
mmcdoanld81 5:cf8ae4ca6f2b 32 acc.setDataRate(MMA8452::RATE_100);
mmcdoanld81 5:cf8ae4ca6f2b 33 }
mmcdoanld81 5:cf8ae4ca6f2b 34 double x = .01;
mmcdoanld81 5:cf8ae4ca6f2b 35 double y = .01;
mmcdoanld81 5:cf8ae4ca6f2b 36 double z = .01;
4180_1 0:cc87c48aa43c 37
mmcdoanld81 5:cf8ae4ca6f2b 38 void accInput(){
mmcdoanld81 5:cf8ae4ca6f2b 39 acc.readXYZGravity(&x,&y,&z);
mmcdoanld81 5:cf8ae4ca6f2b 40 if ((y>0.1)){
mmcdoanld81 5:cf8ae4ca6f2b 41 shipObject.moveLeft();}
mmcdoanld81 5:cf8ae4ca6f2b 42 if ((y<-0.1)){
mmcdoanld81 5:cf8ae4ca6f2b 43 shipObject.moveRight();}
4180_1 2:58d85409f7ff 44
mmcdoanld81 5:cf8ae4ca6f2b 45 };
4180_1 2:58d85409f7ff 46
mmcdoanld81 5:cf8ae4ca6f2b 47 int main() {
mmcdoanld81 5:cf8ae4ca6f2b 48
mmcdoanld81 5:cf8ae4ca6f2b 49 setupAccelerometer();
mmcdoanld81 5:cf8ae4ca6f2b 50 std::srand(time(0)); //seeded with time
4180_1 0:cc87c48aa43c 51
mmcdoanld81 5:cf8ae4ca6f2b 52 uLCD.display_control(LANDSCAPE_R);
mmcdoanld81 5:cf8ae4ca6f2b 53 uLCD.cls();
mmcdoanld81 5:cf8ae4ca6f2b 54 uLCD.baudrate(3000000);
mmcdoanld81 5:cf8ae4ca6f2b 55 wait(0.3);
mmcdoanld81 5:cf8ae4ca6f2b 56 uLCD.background_color(BLACK);
mmcdoanld81 5:cf8ae4ca6f2b 57
mmcdoanld81 5:cf8ae4ca6f2b 58 // Intro Screen Message
mmcdoanld81 5:cf8ae4ca6f2b 59 uLCD.text_width(2);
mmcdoanld81 5:cf8ae4ca6f2b 60 uLCD.text_height(2);
mmcdoanld81 5:cf8ae4ca6f2b 61 uLCD.printf("HELP!\nTHEY ARE\nATTACKING");
mmcdoanld81 5:cf8ae4ca6f2b 62 soundOut.PlayNote(100.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 63 soundOut.PlayNote(200.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 64 soundOut.PlayNote(300.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 65 soundOut.PlayNote(400.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 66 soundOut.PlayNote(300.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 67 soundOut.PlayNote(200.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 68 soundOut.PlayNote(100.0,0.15,0.2);
mmcdoanld81 5:cf8ae4ca6f2b 69 wait(2.0);
4180_1 2:58d85409f7ff 70
mmcdoanld81 5:cf8ae4ca6f2b 71
mmcdoanld81 5:cf8ae4ca6f2b 72 pbFire.mode(PullUp);
mmcdoanld81 5:cf8ae4ca6f2b 73 pbFire.attach_deasserted(&pbFire_hit_callback);
mmcdoanld81 5:cf8ae4ca6f2b 74 pbFire.setSampleFrequency();
mmcdoanld81 5:cf8ae4ca6f2b 75 wait(.01);
4180_1 0:cc87c48aa43c 76
mmcdoanld81 5:cf8ae4ca6f2b 77
mmcdoanld81 5:cf8ae4ca6f2b 78 uLCD.cls();
mmcdoanld81 5:cf8ae4ca6f2b 79 ScreenObject *alienObject[6];
mmcdoanld81 5:cf8ae4ca6f2b 80 alienObject[0] = new AlienBob(1);
mmcdoanld81 5:cf8ae4ca6f2b 81 alienObject[1] = new AlienMike(2);
mmcdoanld81 5:cf8ae4ca6f2b 82 alienObject[2] = new AlienJeff(3);
mmcdoanld81 5:cf8ae4ca6f2b 83 alienObject[3] = new AlienBob(4);
mmcdoanld81 5:cf8ae4ca6f2b 84 alienObject[4] = new AlienMike(5);
mmcdoanld81 5:cf8ae4ca6f2b 85 alienObject[5] = new AlienAlice(6);
mmcdoanld81 5:cf8ae4ca6f2b 86 for (int i = 0; i < 6; i++)
mmcdoanld81 5:cf8ae4ca6f2b 87 {
mmcdoanld81 5:cf8ae4ca6f2b 88 alienObject[i]->draw(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 89 alienObject[i]->setHit(false);
mmcdoanld81 5:cf8ae4ca6f2b 90 }
mmcdoanld81 5:cf8ae4ca6f2b 91
mmcdoanld81 5:cf8ae4ca6f2b 92
mmcdoanld81 5:cf8ae4ca6f2b 93 shipObject.draw(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 94 timeObject.start();
mmcdoanld81 5:cf8ae4ca6f2b 95 bool endGame = false;
mmcdoanld81 5:cf8ae4ca6f2b 96 int numberOfAliens = 6;
mmcdoanld81 5:cf8ae4ca6f2b 97 bool isHit[6] = {false};
mmcdoanld81 5:cf8ae4ca6f2b 98 while (endGame == false) {
mmcdoanld81 5:cf8ae4ca6f2b 99 accInput();
mmcdoanld81 5:cf8ae4ca6f2b 100 if (bulletObject.getBullet() == true) {
mmcdoanld81 5:cf8ae4ca6f2b 101 bulletObject.fireBullet(shipObject,uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 102 soundOut.PlayNote(100, 0.05, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 103 soundOut.PlayNote(50, 0.05, 0.3);
mmcdoanld81 5:cf8ae4ca6f2b 104 }
mmcdoanld81 5:cf8ae4ca6f2b 105 //If the ship has a bullet, run this code
mmcdoanld81 5:cf8ae4ca6f2b 106 while (bulletObject.getBullet() == true) {
mmcdoanld81 5:cf8ae4ca6f2b 107 accInput();
mmcdoanld81 5:cf8ae4ca6f2b 108 shipObject.draw(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 109 bulletObject.update(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 110
mmcdoanld81 5:cf8ae4ca6f2b 111 for (int i = 0; i < 6; i++) {
mmcdoanld81 5:cf8ae4ca6f2b 112 if (numberOfAliens < 1) {
mmcdoanld81 5:cf8ae4ca6f2b 113 endGame = true;
mmcdoanld81 5:cf8ae4ca6f2b 114 break;
mmcdoanld81 5:cf8ae4ca6f2b 115 }
4180_1 2:58d85409f7ff 116
mmcdoanld81 5:cf8ae4ca6f2b 117 isHit[i] = (bulletObject.hitTest(*alienObject[i]));
mmcdoanld81 5:cf8ae4ca6f2b 118
mmcdoanld81 5:cf8ae4ca6f2b 119 if (isHit[i] == true){
mmcdoanld81 5:cf8ae4ca6f2b 120 alienObject[i]->setHit(true);
mmcdoanld81 5:cf8ae4ca6f2b 121 }
mmcdoanld81 5:cf8ae4ca6f2b 122 if (isHit[i] == true) {
mmcdoanld81 5:cf8ae4ca6f2b 123 --numberOfAliens;
mmcdoanld81 5:cf8ae4ca6f2b 124 alienObject[i]->clearScreen(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 125 soundOut.PlayNote(200, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 126 soundOut.PlayNote(350, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 127
mmcdoanld81 5:cf8ae4ca6f2b 128 uLCD.filled_circle(bulletObject.getxBullet(), bulletObject.getyBullet(), 8, BLACK);
mmcdoanld81 5:cf8ae4ca6f2b 129 bulletObject.setBullet(false);
mmcdoanld81 5:cf8ae4ca6f2b 130 }
mmcdoanld81 5:cf8ae4ca6f2b 131 else
mmcdoanld81 5:cf8ae4ca6f2b 132 if ((alienObject[i]->getHit()) == false) {
mmcdoanld81 5:cf8ae4ca6f2b 133 alienObject[i]->update(uLCD);
4180_1 2:58d85409f7ff 134 }
4180_1 2:58d85409f7ff 135 }
mmcdoanld81 5:cf8ae4ca6f2b 136 wait(0.01);
mmcdoanld81 5:cf8ae4ca6f2b 137 }
mmcdoanld81 5:cf8ae4ca6f2b 138
mmcdoanld81 5:cf8ae4ca6f2b 139 while (bulletObject.getBullet() == false) {
mmcdoanld81 5:cf8ae4ca6f2b 140 accInput();
mmcdoanld81 5:cf8ae4ca6f2b 141 if (numberOfAliens < 1) {
mmcdoanld81 5:cf8ae4ca6f2b 142 endGame = true;
mmcdoanld81 5:cf8ae4ca6f2b 143 break;
mmcdoanld81 5:cf8ae4ca6f2b 144 }
mmcdoanld81 5:cf8ae4ca6f2b 145
mmcdoanld81 5:cf8ae4ca6f2b 146 shipObject.draw(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 147 for (int i = 0; i < 6; i++) {
mmcdoanld81 5:cf8ae4ca6f2b 148 if ((alienObject[i]->getHit()) == false){
mmcdoanld81 5:cf8ae4ca6f2b 149 alienObject[i]->update(uLCD);
mmcdoanld81 5:cf8ae4ca6f2b 150 }
mmcdoanld81 5:cf8ae4ca6f2b 151 }
mmcdoanld81 5:cf8ae4ca6f2b 152 wait(0.01);
4180_1 2:58d85409f7ff 153 }
4180_1 0:cc87c48aa43c 154 }
mmcdoanld81 5:cf8ae4ca6f2b 155
mmcdoanld81 5:cf8ae4ca6f2b 156 delete[] alienObject;
mmcdoanld81 5:cf8ae4ca6f2b 157 timeObject.stop();
mmcdoanld81 5:cf8ae4ca6f2b 158 float total = timeObject.read();
mmcdoanld81 5:cf8ae4ca6f2b 159
mmcdoanld81 5:cf8ae4ca6f2b 160 //Winning sound
mmcdoanld81 5:cf8ae4ca6f2b 161 soundOut.PlayNote(1200, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 162 soundOut.PlayNote(900, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 163 soundOut.PlayNote(600, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 164 soundOut.PlayNote(300, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 165 soundOut.PlayNote(100, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 166 soundOut.PlayNote(300, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 167 soundOut.PlayNote(600, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 168 soundOut.PlayNote(900, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 169 soundOut.PlayNote(1200, 0.1, 0.1);
mmcdoanld81 5:cf8ae4ca6f2b 170
mmcdoanld81 5:cf8ae4ca6f2b 171 //Win Screen
mmcdoanld81 5:cf8ae4ca6f2b 172 uLCD.cls();
mmcdoanld81 5:cf8ae4ca6f2b 173 uLCD.printf("\n\n\n\n Congratulations!!\n\n Earth Saved!\n\n\n (%f\n Seconds)",total);
mmcdoanld81 5:cf8ae4ca6f2b 174 wait(4.0);
mmcdoanld81 5:cf8ae4ca6f2b 175 exit(0);
mmcdoanld81 5:cf8ae4ca6f2b 176 }//end main