Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
main.cpp@26:163d7ca8c42d, 22 months ago (annotated)
- Committer:
- jsanchez307
- Date:
- Thu Dec 08 02:12:14 2022 +0000
- Revision:
- 26:163d7ca8c42d
- Parent:
- 25:c3eb6c1a2dfb
- Child:
- 27:a09981ebd532
No speaker. LED works for Tetris by going through RGB one at a time. LCD successfully clears the screen after Tetris is in Game Over and goes to the Menu.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jstephens78 | 0:da114b98e013 | 1 | #include "mbed.h" |
dangulo7 | 1:d8cc5013651e | 2 | #include "rtos.h" |
jstephens78 | 12:5d913b57da7c | 3 | |
jstephens78 | 12:5d913b57da7c | 4 | #include "globals.h" |
jstephens78 | 12:5d913b57da7c | 5 | #include "hockey.h" |
jstephens78 | 20:73e4f12277bd | 6 | #include "tetris.h" |
jstephens78 | 12:5d913b57da7c | 7 | |
jsanchez307 | 26:163d7ca8c42d | 8 | //#include "Speaker.h" |
jstephens78 | 10:f5a84133bd65 | 9 | #include "SDFileSystem.h" |
dangulo7 | 1:d8cc5013651e | 10 | #include "uLCD_4DGL.h" |
jstephens78 | 0:da114b98e013 | 11 | |
jstephens78 | 20:73e4f12277bd | 12 | |
jstephens78 | 20:73e4f12277bd | 13 | |
jstephens78 | 20:73e4f12277bd | 14 | /////////////////////////// |
jstephens78 | 20:73e4f12277bd | 15 | // GLOBALS.H DEFINITIONS // |
jstephens78 | 20:73e4f12277bd | 16 | /////////////////////////// |
jstephens78 | 20:73e4f12277bd | 17 | // The following variables are declared as extern in "globals.h", and we define |
jstephens78 | 20:73e4f12277bd | 18 | // them here: |
jstephens78 | 20:73e4f12277bd | 19 | volatile bool game1 = false; |
jstephens78 | 20:73e4f12277bd | 20 | volatile bool game2 = false; |
jsanchez307 | 26:163d7ca8c42d | 21 | volatile int menu_flag = 0; |
jstephens78 | 20:73e4f12277bd | 22 | |
jstephens78 | 19:6d9bee043ede | 23 | Serial pc(USBTX, USBRX); |
jstephens78 | 20:73e4f12277bd | 24 | Mutex pc_mutex; |
jstephens78 | 20:73e4f12277bd | 25 | |
jstephens78 | 19:6d9bee043ede | 26 | //uLCD_4DGL uLCD(p28, p27, p29); |
jsanchez307 | 23:214c0c828d98 | 27 | uLCD_4DGL uLCD(p13,p14,p30); |
jstephens78 | 17:3517251daf96 | 28 | Mutex uLCD_mutex; |
jstephens78 | 17:3517251daf96 | 29 | |
jsanchez307 | 23:214c0c828d98 | 30 | BluefruitController blue(p28,p27); |
jsanchez307 | 23:214c0c828d98 | 31 | //BusIn navSwitch(p15, p16, p17, p19, p20); |
jsanchez307 | 23:214c0c828d98 | 32 | Nav_Switch myNav(p20, p16, p17, p15, p19); // pins(up, down, left, right, fire) |
jstephens78 | 16:6cf744b2623a | 33 | |
jstephens78 | 20:73e4f12277bd | 34 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
jstephens78 | 16:6cf744b2623a | 35 | PwmOut Rgb(p23); |
jstephens78 | 16:6cf744b2623a | 36 | PwmOut rGb(p24); |
jstephens78 | 16:6cf744b2623a | 37 | PwmOut rgB(p25); |
jsanchez307 | 26:163d7ca8c42d | 38 | //Speaker DACout(p18); |
jsanchez307 | 26:163d7ca8c42d | 39 | //wave_player waver(&DACout); |
jstephens78 | 12:5d913b57da7c | 40 | |
jstephens78 | 0:da114b98e013 | 41 | |
jstephens78 | 20:73e4f12277bd | 42 | |
jstephens78 | 20:73e4f12277bd | 43 | //////////////////////////////// |
jstephens78 | 20:73e4f12277bd | 44 | // MAIN.CPP LOCAL DEFINITIONS // |
jstephens78 | 20:73e4f12277bd | 45 | //////////////////////////////// |
jstephens78 | 20:73e4f12277bd | 46 | // The following variables are *not* from "globals.h" and are not meant for |
jstephens78 | 20:73e4f12277bd | 47 | // reference outside of main.cpp |
jstephens78 | 21:df9e8f45e14c | 48 | DigitalOut led1(LED1); |
jstephens78 | 21:df9e8f45e14c | 49 | DigitalOut led2(LED2); |
jstephens78 | 21:df9e8f45e14c | 50 | DigitalOut led3(LED3); |
jstephens78 | 21:df9e8f45e14c | 51 | DigitalOut led4(LED4); |
jstephens78 | 20:73e4f12277bd | 52 | |
jstephens78 | 20:73e4f12277bd | 53 | |
jstephens78 | 20:73e4f12277bd | 54 | |
jstephens78 | 20:73e4f12277bd | 55 | ////////////////////// |
jstephens78 | 20:73e4f12277bd | 56 | // MAIN.CPP THREADS // |
jstephens78 | 20:73e4f12277bd | 57 | ////////////////////// |
jsanchez307 | 26:163d7ca8c42d | 58 | /* |
jstephens78 | 20:73e4f12277bd | 59 | void audioThread() |
jstephens78 | 11:e00a208bd85a | 60 | { |
jstephens78 | 21:df9e8f45e14c | 61 | while (true) { |
jstephens78 | 21:df9e8f45e14c | 62 | FILE *wave_file; |
jstephens78 | 21:df9e8f45e14c | 63 | while (game1 == false && game2 == false) { |
jstephens78 | 21:df9e8f45e14c | 64 | led2 = true; |
jstephens78 | 21:df9e8f45e14c | 65 | wave_file=fopen("/sd/MiiMenu.wav","r"); |
jstephens78 | 21:df9e8f45e14c | 66 | waver.play(wave_file); |
jstephens78 | 21:df9e8f45e14c | 67 | fclose(wave_file); |
jstephens78 | 21:df9e8f45e14c | 68 | led2 = false; |
jstephens78 | 21:df9e8f45e14c | 69 | } |
jstephens78 | 21:df9e8f45e14c | 70 | while (game1 == true && game2 == false) { |
jstephens78 | 21:df9e8f45e14c | 71 | led2 = true; |
jstephens78 | 21:df9e8f45e14c | 72 | wave_file=fopen("/sd/tetris.wav","r"); |
jstephens78 | 21:df9e8f45e14c | 73 | waver.play(wave_file); |
jstephens78 | 21:df9e8f45e14c | 74 | fclose(wave_file); |
jstephens78 | 21:df9e8f45e14c | 75 | led2 = false; |
jstephens78 | 21:df9e8f45e14c | 76 | } |
jstephens78 | 21:df9e8f45e14c | 77 | while (game2 == true && game1 == false) { |
jstephens78 | 21:df9e8f45e14c | 78 | led2 = true; |
jstephens78 | 21:df9e8f45e14c | 79 | wave_file=fopen("/sd/WiiPlayAirHockey.wav","r"); |
jstephens78 | 21:df9e8f45e14c | 80 | waver.play(wave_file); |
jstephens78 | 21:df9e8f45e14c | 81 | fclose(wave_file); |
jstephens78 | 21:df9e8f45e14c | 82 | led2 = false; |
jstephens78 | 21:df9e8f45e14c | 83 | } |
dangulo7 | 1:d8cc5013651e | 84 | } |
jsanchez307 | 26:163d7ca8c42d | 85 | }*/ |
dangulo7 | 1:d8cc5013651e | 86 | |
jstephens78 | 20:73e4f12277bd | 87 | void ledThread() |
jstephens78 | 11:e00a208bd85a | 88 | { |
jstephens78 | 11:e00a208bd85a | 89 | float x = 0.0; |
dangulo7 | 1:d8cc5013651e | 90 | while(1) { |
dangulo7 | 1:d8cc5013651e | 91 | //get a new random number for PWM |
dangulo7 | 1:d8cc5013651e | 92 | x = rand() / float(RAND_MAX); |
dangulo7 | 1:d8cc5013651e | 93 | //add some exponential brightness scaling |
dangulo7 | 1:d8cc5013651e | 94 | //for more of a fast flash effect |
dangulo7 | 1:d8cc5013651e | 95 | x = x*x*x; |
dangulo7 | 1:d8cc5013651e | 96 | Rgb = x; |
jstephens78 | 11:e00a208bd85a | 97 | rGb = x; |
jstephens78 | 11:e00a208bd85a | 98 | rgB = x; |
dangulo7 | 1:d8cc5013651e | 99 | //fast update rate for welding flashes |
dangulo7 | 1:d8cc5013651e | 100 | Thread::wait(20); |
dangulo7 | 1:d8cc5013651e | 101 | //add a random pause between welds |
jstephens78 | 11:e00a208bd85a | 102 | if (rand() / float(RAND_MAX) > 0.95) { |
dangulo7 | 1:d8cc5013651e | 103 | Rgb = 0; |
dangulo7 | 1:d8cc5013651e | 104 | rGb = 0; |
dangulo7 | 1:d8cc5013651e | 105 | rgB = 0; |
dangulo7 | 1:d8cc5013651e | 106 | Thread::wait(4000.0 * rand() / float(RAND_MAX)); |
dangulo7 | 1:d8cc5013651e | 107 | } |
jstephens78 | 11:e00a208bd85a | 108 | } |
dangulo7 | 1:d8cc5013651e | 109 | } |
jstephens78 | 16:6cf744b2623a | 110 | |
jstephens78 | 11:e00a208bd85a | 111 | int main() |
jstephens78 | 11:e00a208bd85a | 112 | { |
jstephens78 | 20:73e4f12277bd | 113 | // Launch four threads |
jstephens78 | 20:73e4f12277bd | 114 | Thread thread1(tetrisGame, osPriorityHigh); |
jstephens78 | 20:73e4f12277bd | 115 | Thread thread2(hockeyGame, osPriorityHigh); |
jsanchez307 | 23:214c0c828d98 | 116 | //Thread thread3(audioThread, osPriorityLow); |
jstephens78 | 20:73e4f12277bd | 117 | Thread thread4(ledThread, osPriorityLow); |
jsanchez307 | 26:163d7ca8c42d | 118 | |
jstephens78 | 20:73e4f12277bd | 119 | // The main thread goes on to blink LEDs |
jstephens78 | 12:5d913b57da7c | 120 | while (true) { |
jstephens78 | 21:df9e8f45e14c | 121 | led1 = 1; |
jstephens78 | 12:5d913b57da7c | 122 | Thread::wait(500); |
jstephens78 | 21:df9e8f45e14c | 123 | led1 = 0; |
jstephens78 | 12:5d913b57da7c | 124 | Thread::wait(500); |
jsanchez307 | 26:163d7ca8c42d | 125 | if(!game1 && !game2 && menu_flag==0){ |
jsanchez307 | 26:163d7ca8c42d | 126 | uLCD.cls(); |
dangulo7 | 24:3b29ae4d6171 | 127 | uLCD.color(WHITE); |
dangulo7 | 25:c3eb6c1a2dfb | 128 | uLCD.text_height(2); |
dangulo7 | 25:c3eb6c1a2dfb | 129 | uLCD.text_width(2); |
dangulo7 | 25:c3eb6c1a2dfb | 130 | uLCD.locate(2,0); |
dangulo7 | 25:c3eb6c1a2dfb | 131 | uLCD.printf("MENU:\n"); |
dangulo7 | 24:3b29ae4d6171 | 132 | uLCD.printf("UP:\n"); |
dangulo7 | 24:3b29ae4d6171 | 133 | uLCD.printf("Tetris \n"); |
dangulo7 | 24:3b29ae4d6171 | 134 | uLCD.printf("\n"); |
dangulo7 | 24:3b29ae4d6171 | 135 | uLCD.printf("DOWN:\n"); |
dangulo7 | 24:3b29ae4d6171 | 136 | uLCD.printf("Air\n"); |
dangulo7 | 24:3b29ae4d6171 | 137 | uLCD.printf("Hockey"); |
jsanchez307 | 26:163d7ca8c42d | 138 | menu_flag=1; |
dangulo7 | 24:3b29ae4d6171 | 139 | } |
jstephens78 | 20:73e4f12277bd | 140 | |
jsanchez307 | 26:163d7ca8c42d | 141 | //DACout.PlayNote(50, 1.0/2.5, 0.08); |
jsanchez307 | 26:163d7ca8c42d | 142 | |
jstephens78 | 20:73e4f12277bd | 143 | PRINTF("[MAIN] Thread stacks: %lu %lu %lu %lu\r\n", |
jstephens78 | 20:73e4f12277bd | 144 | thread1.used_stack(), |
jstephens78 | 20:73e4f12277bd | 145 | thread2.used_stack(), |
jsanchez307 | 23:214c0c828d98 | 146 | //thread3.used_stack(), |
jstephens78 | 20:73e4f12277bd | 147 | thread4.used_stack()); |
jstephens78 | 20:73e4f12277bd | 148 | |
jstephens78 | 20:73e4f12277bd | 149 | // Launch into the air hockey game |
jsanchez307 | 26:163d7ca8c42d | 150 | if (game1 != true && game2 != true && myNav.up()){ |
dangulo7 | 24:3b29ae4d6171 | 151 | uLCD.cls(); |
dangulo7 | 24:3b29ae4d6171 | 152 | game1 = true; |
dangulo7 | 24:3b29ae4d6171 | 153 | } |
jsanchez307 | 26:163d7ca8c42d | 154 | if (game2 != true && game1 != true && myNav.down()){ |
dangulo7 | 24:3b29ae4d6171 | 155 | uLCD.cls(); |
dangulo7 | 24:3b29ae4d6171 | 156 | game2 = true; |
dangulo7 | 24:3b29ae4d6171 | 157 | } |
jstephens78 | 0:da114b98e013 | 158 | } |
jstephens78 | 0:da114b98e013 | 159 | } |