Millun Atluri / Mbed 2 deprecated ReactionGame

Dependencies:   PinDetect SDFileSystem Speaker mbed wave_player

Committer:
imic1
Date:
Mon Nov 07 21:38:26 2016 +0000
Revision:
0:3910d0eae907
final;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
imic1 0:3910d0eae907 1 #include "mbed.h"
imic1 0:3910d0eae907 2 #include "SDFileSystem.h"
imic1 0:3910d0eae907 3 #include "wave_player.h"
imic1 0:3910d0eae907 4 #include "Speaker.h"
imic1 0:3910d0eae907 5 #include "PinDetect.h"
imic1 0:3910d0eae907 6 #include <iostream>
imic1 0:3910d0eae907 7 #include <ctime>
imic1 0:3910d0eae907 8
imic1 0:3910d0eae907 9
imic1 0:3910d0eae907 10 DigitalOut led1(LED1);
imic1 0:3910d0eae907 11 DigitalOut led2(LED2);
imic1 0:3910d0eae907 12 DigitalOut led3(LED3);
imic1 0:3910d0eae907 13 DigitalOut led4(LED4);
imic1 0:3910d0eae907 14
imic1 0:3910d0eae907 15 SDFileSystem sd(p5, p6, p7, p8, "sd");
imic1 0:3910d0eae907 16 AnalogOut DACout(p18);
imic1 0:3910d0eae907 17 Serial pc(USBTX, USBRX);
imic1 0:3910d0eae907 18 Serial blue(p28,p27);
imic1 0:3910d0eae907 19 wave_player waver(&DACout);
imic1 0:3910d0eae907 20 PinDetect pin(p14);
imic1 0:3910d0eae907 21
imic1 0:3910d0eae907 22 bool joyPressedBool = false;
imic1 0:3910d0eae907 23 bool phonePressedBool = false;
imic1 0:3910d0eae907 24 clock_t joyTime;
imic1 0:3910d0eae907 25 clock_t phoneTime;
imic1 0:3910d0eae907 26 clock_t ticks = CLOCKS_PER_SEC;
imic1 0:3910d0eae907 27
imic1 0:3910d0eae907 28 void joyPressed( void ) {
imic1 0:3910d0eae907 29 joyPressedBool = true;
imic1 0:3910d0eae907 30 joyTime = clock();
imic1 0:3910d0eae907 31 //joyTime = (double)joyTime/(double)ticks;
imic1 0:3910d0eae907 32 led2 = 1;
imic1 0:3910d0eae907 33 pc.printf("Player 1 pressed!\n");
imic1 0:3910d0eae907 34 //wait(3);
imic1 0:3910d0eae907 35 }
imic1 0:3910d0eae907 36
imic1 0:3910d0eae907 37 void joyReleased( void ) {
imic1 0:3910d0eae907 38 joyPressedBool = true;
imic1 0:3910d0eae907 39 joyTime = clock();
imic1 0:3910d0eae907 40 led2 = 0;
imic1 0:3910d0eae907 41 //wait(3);
imic1 0:3910d0eae907 42 }
imic1 0:3910d0eae907 43
imic1 0:3910d0eae907 44 void joyPressedHeld( void ) {
imic1 0:3910d0eae907 45
imic1 0:3910d0eae907 46 }
imic1 0:3910d0eae907 47
imic1 0:3910d0eae907 48 void joyReleasedHeld( void ) {
imic1 0:3910d0eae907 49
imic1 0:3910d0eae907 50 }
imic1 0:3910d0eae907 51 //
imic1 0:3910d0eae907 52 //BusOut mbedleds(LED1,LED2,LED3,LED4);
imic1 0:3910d0eae907 53 ////BusOut/In is faster than multiple DigitalOut/Ins
imic1 0:3910d0eae907 54 //
imic1 0:3910d0eae907 55 //class Nav_Switch
imic1 0:3910d0eae907 56 //{
imic1 0:3910d0eae907 57 //public:
imic1 0:3910d0eae907 58 // Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire);
imic1 0:3910d0eae907 59 // int read();
imic1 0:3910d0eae907 60 ////boolean functions to test each switch
imic1 0:3910d0eae907 61 // bool up();
imic1 0:3910d0eae907 62 // bool down();
imic1 0:3910d0eae907 63 // bool left();
imic1 0:3910d0eae907 64 // bool right();
imic1 0:3910d0eae907 65 // bool fire();
imic1 0:3910d0eae907 66 ////automatic read on RHS
imic1 0:3910d0eae907 67 // operator int ();
imic1 0:3910d0eae907 68 ////index to any switch array style
imic1 0:3910d0eae907 69 // bool operator[](int index) {
imic1 0:3910d0eae907 70 // return _pins[index];
imic1 0:3910d0eae907 71 // };
imic1 0:3910d0eae907 72 //private:
imic1 0:3910d0eae907 73 // BusIn _pins;
imic1 0:3910d0eae907 74 //
imic1 0:3910d0eae907 75 //};
imic1 0:3910d0eae907 76 //Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire):
imic1 0:3910d0eae907 77 // _pins(up, down, left, right, fire)
imic1 0:3910d0eae907 78 //{
imic1 0:3910d0eae907 79 // _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
imic1 0:3910d0eae907 80 // wait(0.001); //delays just a bit for pullups to pull inputs high
imic1 0:3910d0eae907 81 //}
imic1 0:3910d0eae907 82 //inline bool Nav_Switch::up()
imic1 0:3910d0eae907 83 //{
imic1 0:3910d0eae907 84 // return !(_pins[0]);
imic1 0:3910d0eae907 85 //}
imic1 0:3910d0eae907 86 //inline bool Nav_Switch::down()
imic1 0:3910d0eae907 87 //{
imic1 0:3910d0eae907 88 // return !(_pins[1]);
imic1 0:3910d0eae907 89 //}
imic1 0:3910d0eae907 90 //inline bool Nav_Switch::left()
imic1 0:3910d0eae907 91 //{
imic1 0:3910d0eae907 92 // return !(_pins[2]);
imic1 0:3910d0eae907 93 //}
imic1 0:3910d0eae907 94 //inline bool Nav_Switch::right()
imic1 0:3910d0eae907 95 //{
imic1 0:3910d0eae907 96 // return !(_pins[3]);
imic1 0:3910d0eae907 97 //}
imic1 0:3910d0eae907 98 //inline bool Nav_Switch::fire()
imic1 0:3910d0eae907 99 //{
imic1 0:3910d0eae907 100 // return !(_pins[4]);
imic1 0:3910d0eae907 101 //}
imic1 0:3910d0eae907 102 //inline int Nav_Switch::read()
imic1 0:3910d0eae907 103 //{
imic1 0:3910d0eae907 104 // return _pins.read();
imic1 0:3910d0eae907 105 //}
imic1 0:3910d0eae907 106 //inline Nav_Switch::operator int ()
imic1 0:3910d0eae907 107 //{
imic1 0:3910d0eae907 108 // return _pins.read();
imic1 0:3910d0eae907 109 //}
imic1 0:3910d0eae907 110 //
imic1 0:3910d0eae907 111 //Nav_Switch myNav( p9, p6, p7, p5, p8); //pin order on Sparkfun breakout
imic1 0:3910d0eae907 112
imic1 0:3910d0eae907 113
imic1 0:3910d0eae907 114 int main() {
imic1 0:3910d0eae907 115 pin.mode( PullDown );
imic1 0:3910d0eae907 116 pin.attach_asserted( &joyPressed );
imic1 0:3910d0eae907 117 pin.attach_deasserted( &joyReleased );
imic1 0:3910d0eae907 118 pin.setSampleFrequency();
imic1 0:3910d0eae907 119 do{
imic1 0:3910d0eae907 120 //read in the sound file
imic1 0:3910d0eae907 121 FILE *wave_file;
imic1 0:3910d0eae907 122 wave_file = fopen("/sd/countdown.wav", "r");
imic1 0:3910d0eae907 123 led1 = 1;
imic1 0:3910d0eae907 124 //play the countdown sound
imic1 0:3910d0eae907 125 //waver.play(wave_file);
imic1 0:3910d0eae907 126 led1 = 0;
imic1 0:3910d0eae907 127 fclose(wave_file);
imic1 0:3910d0eae907 128
imic1 0:3910d0eae907 129 pc.printf("START\n\n");
imic1 0:3910d0eae907 130
imic1 0:3910d0eae907 131 //start the timer
imic1 0:3910d0eae907 132 clock_t startTime = clock();
imic1 0:3910d0eae907 133
imic1 0:3910d0eae907 134
imic1 0:3910d0eae907 135 // //setup bluetooth
imic1 0:3910d0eae907 136 // char bnum = 0;
imic1 0:3910d0eae907 137 // do{
imic1 0:3910d0eae907 138 // if (blue.getc()=='!') {
imic1 0:3910d0eae907 139 // if (blue.getc()=='B') { //button data
imic1 0:3910d0eae907 140 // bnum = blue.getc(); //button number
imic1 0:3910d0eae907 141 // }
imic1 0:3910d0eae907 142 // }
imic1 0:3910d0eae907 143 // }while(blue.getc() != 'B');
imic1 0:3910d0eae907 144 //
imic1 0:3910d0eae907 145
imic1 0:3910d0eae907 146
imic1 0:3910d0eae907 147
imic1 0:3910d0eae907 148 //while joystick or phone button has not been pressed
imic1 0:3910d0eae907 149 pin.attach_asserted_held( &joyPressedHeld );
imic1 0:3910d0eae907 150 pin.attach_deasserted_held( &joyReleasedHeld );
imic1 0:3910d0eae907 151
imic1 0:3910d0eae907 152
imic1 0:3910d0eae907 153
imic1 0:3910d0eae907 154 //save time of one that was pressed
imic1 0:3910d0eae907 155 //keep running until one that wasn't pressed is now pressed
imic1 0:3910d0eae907 156 //print over serial
imic1 0:3910d0eae907 157 while(!joyPressedBool || !phonePressedBool){
imic1 0:3910d0eae907 158 led4 = 1;
imic1 0:3910d0eae907 159 char bnum=0;
imic1 0:3910d0eae907 160 char bhit=0;
imic1 0:3910d0eae907 161 if (blue.getc()=='!') {
imic1 0:3910d0eae907 162 if (blue.getc()=='B') { //button data packet
imic1 0:3910d0eae907 163 bnum = blue.getc(); //button number
imic1 0:3910d0eae907 164 bhit = blue.getc(); //1=hit, 0=release
imic1 0:3910d0eae907 165 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
imic1 0:3910d0eae907 166 switch (bnum) {
imic1 0:3910d0eae907 167 case '1': //number button 1
imic1 0:3910d0eae907 168 if (bhit=='1') {
imic1 0:3910d0eae907 169 phoneTime = clock();
imic1 0:3910d0eae907 170 phonePressedBool = true;
imic1 0:3910d0eae907 171 pc.printf("Player 2 pressed!\n");
imic1 0:3910d0eae907 172 led3 = 1;
imic1 0:3910d0eae907 173 }
imic1 0:3910d0eae907 174 wait(1);
imic1 0:3910d0eae907 175 break;
imic1 0:3910d0eae907 176
imic1 0:3910d0eae907 177 }
imic1 0:3910d0eae907 178 // pc.printf("hgere?1\n\n");
imic1 0:3910d0eae907 179 }
imic1 0:3910d0eae907 180 }
imic1 0:3910d0eae907 181 //pc.printf("hgere?2\n\n");
imic1 0:3910d0eae907 182 }
imic1 0:3910d0eae907 183 }
imic1 0:3910d0eae907 184
imic1 0:3910d0eae907 185 pc.printf("We have a winner! ");
imic1 0:3910d0eae907 186 led1 = 1;
imic1 0:3910d0eae907 187 if(joyTime < phoneTime) {
imic1 0:3910d0eae907 188 pc.printf("Player 1 won!\n\n");
imic1 0:3910d0eae907 189 }else if(phoneTime < joyTime) {
imic1 0:3910d0eae907 190 pc.printf("Player 2 won!\n\n");
imic1 0:3910d0eae907 191 }
imic1 0:3910d0eae907 192
imic1 0:3910d0eae907 193 wait(30);
imic1 0:3910d0eae907 194 }while(1);
imic1 0:3910d0eae907 195
imic1 0:3910d0eae907 196 }