AirsoftTimer software based on mbed
Dependencies: mbed TextLCD keypad
games/ShowBuzzer.cpp@11:50572814f73e, 2014-12-31 (annotated)
- Committer:
- sillevl
- Date:
- Wed Dec 31 15:27:43 2014 +0000
- Revision:
- 11:50572814f73e
- Child:
- 12:22e9ef610ea2
ShowBuzzer;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sillevl | 11:50572814f73e | 1 | |
sillevl | 11:50572814f73e | 2 | #include "ShowBuzzer.h" |
sillevl | 11:50572814f73e | 3 | |
sillevl | 11:50572814f73e | 4 | |
sillevl | 11:50572814f73e | 5 | static const char* NAME = "ShowBuzzer"; |
sillevl | 11:50572814f73e | 6 | |
sillevl | 11:50572814f73e | 7 | ShowBuzzer::ShowBuzzer(Board* board) : Game(board){ |
sillevl | 11:50572814f73e | 8 | board->keyboard->attach(this,&ShowBuzzer::keyPressed); |
sillevl | 11:50572814f73e | 9 | board->keyboard->start(); |
sillevl | 11:50572814f73e | 10 | board->leds->off(Leds::ALL); |
sillevl | 11:50572814f73e | 11 | } |
sillevl | 11:50572814f73e | 12 | |
sillevl | 11:50572814f73e | 13 | void ShowBuzzer::run(){ |
sillevl | 11:50572814f73e | 14 | board->lcd->printf("ShowBuzzer"); |
sillevl | 11:50572814f73e | 15 | newRound(); |
sillevl | 11:50572814f73e | 16 | while(true){ |
sillevl | 11:50572814f73e | 17 | |
sillevl | 11:50572814f73e | 18 | //wait for button press |
sillevl | 11:50572814f73e | 19 | Team team = waitForButtonPress(); |
sillevl | 11:50572814f73e | 20 | //show leds |
sillevl | 11:50572814f73e | 21 | setLeds(team); |
sillevl | 11:50572814f73e | 22 | //show display |
sillevl | 11:50572814f73e | 23 | setDisplay(team); |
sillevl | 11:50572814f73e | 24 | //play sound |
sillevl | 11:50572814f73e | 25 | playSound(); |
sillevl | 11:50572814f73e | 26 | //wait for 3 seconds |
sillevl | 11:50572814f73e | 27 | wait_ms(5000); |
sillevl | 11:50572814f73e | 28 | //start new round |
sillevl | 11:50572814f73e | 29 | newRound(); |
sillevl | 11:50572814f73e | 30 | |
sillevl | 11:50572814f73e | 31 | // don't return from this function yet (only if the game ends); |
sillevl | 11:50572814f73e | 32 | } |
sillevl | 11:50572814f73e | 33 | } |
sillevl | 11:50572814f73e | 34 | |
sillevl | 11:50572814f73e | 35 | void ShowBuzzer::newRound(){ |
sillevl | 11:50572814f73e | 36 | board->buzzer->playNote(200,50); |
sillevl | 11:50572814f73e | 37 | board->leds->off(Leds::ALL); |
sillevl | 11:50572814f73e | 38 | board->lcd->cls(); |
sillevl | 11:50572814f73e | 39 | board->lcd->printf("*** WAITING ***"); |
sillevl | 11:50572814f73e | 40 | } |
sillevl | 11:50572814f73e | 41 | |
sillevl | 11:50572814f73e | 42 | ShowBuzzer::Team ShowBuzzer::waitForButtonPress(){ |
sillevl | 11:50572814f73e | 43 | Team team; |
sillevl | 11:50572814f73e | 44 | while(true){ |
sillevl | 11:50572814f73e | 45 | if(board->button->read() == 0){ |
sillevl | 11:50572814f73e | 46 | team = TEAM_B; |
sillevl | 11:50572814f73e | 47 | break; |
sillevl | 11:50572814f73e | 48 | } |
sillevl | 11:50572814f73e | 49 | if(board->key->read() == 0){ |
sillevl | 11:50572814f73e | 50 | team = TEAM_A; |
sillevl | 11:50572814f73e | 51 | break; |
sillevl | 11:50572814f73e | 52 | } |
sillevl | 11:50572814f73e | 53 | } |
sillevl | 11:50572814f73e | 54 | return team; |
sillevl | 11:50572814f73e | 55 | } |
sillevl | 11:50572814f73e | 56 | |
sillevl | 11:50572814f73e | 57 | void ShowBuzzer::setLeds(Team team){ |
sillevl | 11:50572814f73e | 58 | switch(team){ |
sillevl | 11:50572814f73e | 59 | case TEAM_A: |
sillevl | 11:50572814f73e | 60 | board->leds->on(Leds::LEFT); |
sillevl | 11:50572814f73e | 61 | break; |
sillevl | 11:50572814f73e | 62 | case TEAM_B: |
sillevl | 11:50572814f73e | 63 | board->leds->on(Leds::RIGHT); |
sillevl | 11:50572814f73e | 64 | break; |
sillevl | 11:50572814f73e | 65 | default: |
sillevl | 11:50572814f73e | 66 | break; |
sillevl | 11:50572814f73e | 67 | } |
sillevl | 11:50572814f73e | 68 | } |
sillevl | 11:50572814f73e | 69 | |
sillevl | 11:50572814f73e | 70 | void ShowBuzzer::setDisplay(Team team){ |
sillevl | 11:50572814f73e | 71 | board->lcd->locate(0,0); |
sillevl | 11:50572814f73e | 72 | board->lcd->cls(); |
sillevl | 11:50572814f73e | 73 | switch(team){ |
sillevl | 11:50572814f73e | 74 | case TEAM_A: |
sillevl | 11:50572814f73e | 75 | board->lcd->printf("Team A"); |
sillevl | 11:50572814f73e | 76 | break; |
sillevl | 11:50572814f73e | 77 | case TEAM_B: |
sillevl | 11:50572814f73e | 78 | board->lcd->printf("Team B"); |
sillevl | 11:50572814f73e | 79 | break; |
sillevl | 11:50572814f73e | 80 | default: |
sillevl | 11:50572814f73e | 81 | break; |
sillevl | 11:50572814f73e | 82 | } |
sillevl | 11:50572814f73e | 83 | } |
sillevl | 11:50572814f73e | 84 | |
sillevl | 11:50572814f73e | 85 | void ShowBuzzer::playSound(){ |
sillevl | 11:50572814f73e | 86 | board->buzzer->playNote(698, 50); |
sillevl | 11:50572814f73e | 87 | board->buzzer->playNote(783, 50); |
sillevl | 11:50572814f73e | 88 | board->buzzer->playNote(880, 50); |
sillevl | 11:50572814f73e | 89 | board->buzzer->playNote(987, 50); |
sillevl | 11:50572814f73e | 90 | board->buzzer->playNote(1108, 50); |
sillevl | 11:50572814f73e | 91 | board->buzzer->playNote(1244, 50); |
sillevl | 11:50572814f73e | 92 | board->buzzer->playNote(1396, 50); |
sillevl | 11:50572814f73e | 93 | board->buzzer->playNote(1567, 50); |
sillevl | 11:50572814f73e | 94 | board->buzzer->playNote(1760, 50); |
sillevl | 11:50572814f73e | 95 | board->buzzer->playNote(1975, 50); |
sillevl | 11:50572814f73e | 96 | } |
sillevl | 11:50572814f73e | 97 | |
sillevl | 11:50572814f73e | 98 | void ShowBuzzer::playCorrect(){ |
sillevl | 11:50572814f73e | 99 | board->buzzer->playNote(2093, 100); |
sillevl | 11:50572814f73e | 100 | board->buzzer->playNote(2637, 100); |
sillevl | 11:50572814f73e | 101 | board->buzzer->playNote(3165, 100); |
sillevl | 11:50572814f73e | 102 | board->buzzer->playNote(3951, 100); |
sillevl | 11:50572814f73e | 103 | } |
sillevl | 11:50572814f73e | 104 | |
sillevl | 11:50572814f73e | 105 | void ShowBuzzer::playWrong(){ |
sillevl | 11:50572814f73e | 106 | board->buzzer->playNote(440, 1000); |
sillevl | 11:50572814f73e | 107 | } |
sillevl | 11:50572814f73e | 108 | |
sillevl | 11:50572814f73e | 109 | uint32_t ShowBuzzer::keyPressed(uint32_t key){ |
sillevl | 11:50572814f73e | 110 | if(key == 11){ playCorrect();} |
sillevl | 11:50572814f73e | 111 | if(key == 9){ playWrong();} |
sillevl | 11:50572814f73e | 112 | return 0; |
sillevl | 11:50572814f73e | 113 | } |
sillevl | 11:50572814f73e | 114 | |
sillevl | 11:50572814f73e | 115 | |
sillevl | 11:50572814f73e | 116 | |
sillevl | 11:50572814f73e | 117 | |
sillevl | 11:50572814f73e | 118 | |
sillevl | 11:50572814f73e | 119 |