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: PinDetect SDFileSystem Speaker mbed wave_player
main.cpp@0:3910d0eae907, 2016-11-07 (annotated)
- Committer:
- imic1
- Date:
- Mon Nov 07 21:38:26 2016 +0000
- Revision:
- 0:3910d0eae907
final;
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |