Power Grid Board Game Timer. Acts like a chess timer for 3-6 people. Uses an ADXL accelerometer to pause the timer and change players. Uses an LCD screen to prompt the players for input, read that input, and change between rounds.
Dependencies: DmTouch_UniGraphic UniGraphic-forLdelaney17FinalProject mbed
main.cpp@4:e14c199c2466, 2017-01-25 (annotated)
- Committer:
- ldelaney17
- Date:
- Wed Jan 25 10:03:52 2017 +0000
- Revision:
- 4:e14c199c2466
- Parent:
- 3:22c644f16365
everything except the sound works
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ldelaney17 | 0:1abea3982908 | 1 | #include "mbed.h" |
ldelaney17 | 0:1abea3982908 | 2 | #include "acc.h" |
ldelaney17 | 1:ba0f395e8c11 | 3 | #include "display.h" |
ldelaney17 | 1:ba0f395e8c11 | 4 | #include "DmTouch.h" |
ldelaney17 | 1:ba0f395e8c11 | 5 | #include "lcd_prompts.h" |
ldelaney17 | 2:e6788e73de54 | 6 | #include "game.h" |
ldelaney17 | 1:ba0f395e8c11 | 7 | #include <sstream> |
ldelaney17 | 4:e14c199c2466 | 8 | #include "Song.h" |
ldelaney17 | 1:ba0f395e8c11 | 9 | |
ldelaney17 | 0:1abea3982908 | 10 | DigitalOut gpo(D0); |
ldelaney17 | 0:1abea3982908 | 11 | DigitalOut led(LED_RED); |
ldelaney17 | 0:1abea3982908 | 12 | DigitalOut led_blue(LED_BLUE); |
ldelaney17 | 4:e14c199c2466 | 13 | DigitalOut led_green(LED_GREEN); |
ldelaney17 | 0:1abea3982908 | 14 | I2C connection(D14, D15); |
ldelaney17 | 0:1abea3982908 | 15 | InterruptIn acc_int(D8); |
ldelaney17 | 1:ba0f395e8c11 | 16 | PinName dataBus[] = {PTC16, PTC17, PTB9, PTA1, PTB23, PTA2, PTC2, PTC3}; |
ldelaney17 | 1:ba0f395e8c11 | 17 | ILI932x myLCD(BUS_8, dataBus, PTB18, PTB19, PTC1, PTC8, PTC9, "myLCD", 240, 320); |
ldelaney17 | 1:ba0f395e8c11 | 18 | DmTouch touch(DmTouch::DM_TFT24_104, PTD2, PTD3, PTD1, PTC0, PTC7); |
ldelaney17 | 4:e14c199c2466 | 19 | PwmOut myBuzzer(A5); |
ldelaney17 | 4:e14c199c2466 | 20 | |
ldelaney17 | 1:ba0f395e8c11 | 21 | Timeout read_again; |
ldelaney17 | 1:ba0f395e8c11 | 22 | int num_choices_global; |
ldelaney17 | 1:ba0f395e8c11 | 23 | int prompt_input_val; |
ldelaney17 | 1:ba0f395e8c11 | 24 | Serial pc(USBTX, USBRX); |
ldelaney17 | 1:ba0f395e8c11 | 25 | bool waiting_for_touch; |
ldelaney17 | 2:e6788e73de54 | 26 | int num_players; |
ldelaney17 | 2:e6788e73de54 | 27 | int current_player; |
ldelaney17 | 4:e14c199c2466 | 28 | int current_player_index; |
ldelaney17 | 2:e6788e73de54 | 29 | Timer current_clock; |
ldelaney17 | 2:e6788e73de54 | 30 | vector<float> player_timers; |
ldelaney17 | 2:e6788e73de54 | 31 | vector<int> player_order; |
ldelaney17 | 4:e14c199c2466 | 32 | float bonus_time; |
ldelaney17 | 4:e14c199c2466 | 33 | Timeout time_before_warning; |
ldelaney17 | 4:e14c199c2466 | 34 | Timeout time_after_warning; |
ldelaney17 | 4:e14c199c2466 | 35 | Song * jeopardy, * scale, * beep; |
ldelaney17 | 4:e14c199c2466 | 36 | Timeout note_duration; |
ldelaney17 | 4:e14c199c2466 | 37 | bool clock_running; |
ldelaney17 | 4:e14c199c2466 | 38 | int step_number; |
ldelaney17 | 1:ba0f395e8c11 | 39 | |
ldelaney17 | 1:ba0f395e8c11 | 40 | void setup(); |
ldelaney17 | 0:1abea3982908 | 41 | |
ldelaney17 | 0:1abea3982908 | 42 | int main() |
ldelaney17 | 0:1abea3982908 | 43 | { |
ldelaney17 | 1:ba0f395e8c11 | 44 | setup(); |
ldelaney17 | 4:e14c199c2466 | 45 | pc.printf("completed setup\r\n"); |
ldelaney17 | 4:e14c199c2466 | 46 | //jeopardy->play(); |
ldelaney17 | 1:ba0f395e8c11 | 47 | int n; |
ldelaney17 | 0:1abea3982908 | 48 | while (true) { |
ldelaney17 | 4:e14c199c2466 | 49 | display_timer(); |
ldelaney17 | 1:ba0f395e8c11 | 50 | if (waiting_for_touch == false){ |
ldelaney17 | 4:e14c199c2466 | 51 | //the only time we hit this point in main is while waiting for the next step |
ldelaney17 | 4:e14c199c2466 | 52 | next_step(); //next_step will take care of pausing the timers |
ldelaney17 | 1:ba0f395e8c11 | 53 | } |
ldelaney17 | 1:ba0f395e8c11 | 54 | else {//waiting_for_touch is true |
ldelaney17 | 4:e14c199c2466 | 55 | //pc.printf("waiting for x\r\n"); //used for debugging |
ldelaney17 | 1:ba0f395e8c11 | 56 | } |
ldelaney17 | 0:1abea3982908 | 57 | led = !led; // toggle led |
ldelaney17 | 0:1abea3982908 | 58 | if (acc_int){ |
ldelaney17 | 0:1abea3982908 | 59 | int buf = get_int_type(); |
ldelaney17 | 3:22c644f16365 | 60 | if (buf == 1){ |
ldelaney17 | 4:e14c199c2466 | 61 | toggle_pause(); |
ldelaney17 | 4:e14c199c2466 | 62 | led_green = !led_green; |
ldelaney17 | 3:22c644f16365 | 63 | } |
ldelaney17 | 3:22c644f16365 | 64 | else if (buf == 2){ |
ldelaney17 | 4:e14c199c2466 | 65 | next_player(); |
ldelaney17 | 4:e14c199c2466 | 66 | display_timer(); |
ldelaney17 | 4:e14c199c2466 | 67 | led_blue = !led_blue; |
ldelaney17 | 3:22c644f16365 | 68 | } |
ldelaney17 | 0:1abea3982908 | 69 | } |
ldelaney17 | 0:1abea3982908 | 70 | wait(0.2f); |
ldelaney17 | 1:ba0f395e8c11 | 71 | pc.printf("completed a loop through main \r\n"); |
ldelaney17 | 1:ba0f395e8c11 | 72 | wait(0.2f); |
ldelaney17 | 0:1abea3982908 | 73 | } |
ldelaney17 | 1:ba0f395e8c11 | 74 | } |
ldelaney17 | 1:ba0f395e8c11 | 75 | |
ldelaney17 | 1:ba0f395e8c11 | 76 | void setup(){ |
ldelaney17 | 1:ba0f395e8c11 | 77 | acc_init( 10 , 0.5 , 6 , 318.75 ); |
ldelaney17 | 1:ba0f395e8c11 | 78 | led_blue = 1; |
ldelaney17 | 4:e14c199c2466 | 79 | led_green = 1; |
ldelaney17 | 1:ba0f395e8c11 | 80 | touch.init(); |
ldelaney17 | 1:ba0f395e8c11 | 81 | touch.setOrientation(3); |
ldelaney17 | 1:ba0f395e8c11 | 82 | display_init(); |
ldelaney17 | 1:ba0f395e8c11 | 83 | prompt_init(); |
ldelaney17 | 1:ba0f395e8c11 | 84 | waiting_for_touch = false; |
ldelaney17 | 2:e6788e73de54 | 85 | game_setup(); |
ldelaney17 | 0:1abea3982908 | 86 | } |