Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
main.cpp@23:214c0c828d98, 22 months ago (annotated)
- Committer:
- jsanchez307
- Date:
- Wed Dec 07 23:12:12 2022 +0000
- Revision:
- 23:214c0c828d98
- Parent:
- 21:df9e8f45e14c
- Child:
- 24:3b29ae4d6171
Tetris and Hockey updated for Nav_Switch myNav
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 | |
jstephens78 | 21:df9e8f45e14c | 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; |
jstephens78 | 20:73e4f12277bd | 21 | |
jstephens78 | 19:6d9bee043ede | 22 | Serial pc(USBTX, USBRX); |
jstephens78 | 20:73e4f12277bd | 23 | Mutex pc_mutex; |
jstephens78 | 20:73e4f12277bd | 24 | |
jstephens78 | 19:6d9bee043ede | 25 | //uLCD_4DGL uLCD(p28, p27, p29); |
jsanchez307 | 23:214c0c828d98 | 26 | uLCD_4DGL uLCD(p13,p14,p30); |
jstephens78 | 17:3517251daf96 | 27 | Mutex uLCD_mutex; |
jstephens78 | 17:3517251daf96 | 28 | |
jsanchez307 | 23:214c0c828d98 | 29 | BluefruitController blue(p28,p27); |
jsanchez307 | 23:214c0c828d98 | 30 | //BusIn navSwitch(p15, p16, p17, p19, p20); |
jsanchez307 | 23:214c0c828d98 | 31 | Nav_Switch myNav(p20, p16, p17, p15, p19); // pins(up, down, left, right, fire) |
jstephens78 | 16:6cf744b2623a | 32 | |
jstephens78 | 20:73e4f12277bd | 33 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
jstephens78 | 16:6cf744b2623a | 34 | PwmOut Rgb(p23); |
jstephens78 | 16:6cf744b2623a | 35 | PwmOut rGb(p24); |
jstephens78 | 16:6cf744b2623a | 36 | PwmOut rgB(p25); |
jstephens78 | 21:df9e8f45e14c | 37 | AnalogOut DACout(p18); |
jstephens78 | 21:df9e8f45e14c | 38 | wave_player waver(&DACout); |
jstephens78 | 12:5d913b57da7c | 39 | |
jstephens78 | 0:da114b98e013 | 40 | |
jstephens78 | 20:73e4f12277bd | 41 | |
jstephens78 | 20:73e4f12277bd | 42 | //////////////////////////////// |
jstephens78 | 20:73e4f12277bd | 43 | // MAIN.CPP LOCAL DEFINITIONS // |
jstephens78 | 20:73e4f12277bd | 44 | //////////////////////////////// |
jstephens78 | 20:73e4f12277bd | 45 | // The following variables are *not* from "globals.h" and are not meant for |
jstephens78 | 20:73e4f12277bd | 46 | // reference outside of main.cpp |
jstephens78 | 21:df9e8f45e14c | 47 | DigitalOut led1(LED1); |
jstephens78 | 21:df9e8f45e14c | 48 | DigitalOut led2(LED2); |
jstephens78 | 21:df9e8f45e14c | 49 | DigitalOut led3(LED3); |
jstephens78 | 21:df9e8f45e14c | 50 | DigitalOut led4(LED4); |
jstephens78 | 20:73e4f12277bd | 51 | |
jstephens78 | 20:73e4f12277bd | 52 | |
jstephens78 | 20:73e4f12277bd | 53 | |
jstephens78 | 20:73e4f12277bd | 54 | ////////////////////// |
jstephens78 | 20:73e4f12277bd | 55 | // MAIN.CPP THREADS // |
jstephens78 | 20:73e4f12277bd | 56 | ////////////////////// |
jstephens78 | 20:73e4f12277bd | 57 | void audioThread() |
jstephens78 | 11:e00a208bd85a | 58 | { |
jstephens78 | 21:df9e8f45e14c | 59 | while (true) { |
jstephens78 | 21:df9e8f45e14c | 60 | FILE *wave_file; |
jstephens78 | 21:df9e8f45e14c | 61 | while (game1 == false && game2 == false) { |
jstephens78 | 21:df9e8f45e14c | 62 | led2 = true; |
jstephens78 | 21:df9e8f45e14c | 63 | wave_file=fopen("/sd/MiiMenu.wav","r"); |
jstephens78 | 21:df9e8f45e14c | 64 | waver.play(wave_file); |
jstephens78 | 21:df9e8f45e14c | 65 | fclose(wave_file); |
jstephens78 | 21:df9e8f45e14c | 66 | led2 = false; |
jstephens78 | 21:df9e8f45e14c | 67 | } |
jstephens78 | 21:df9e8f45e14c | 68 | while (game1 == true && game2 == false) { |
jstephens78 | 21:df9e8f45e14c | 69 | led2 = true; |
jstephens78 | 21:df9e8f45e14c | 70 | wave_file=fopen("/sd/tetris.wav","r"); |
jstephens78 | 21:df9e8f45e14c | 71 | waver.play(wave_file); |
jstephens78 | 21:df9e8f45e14c | 72 | fclose(wave_file); |
jstephens78 | 21:df9e8f45e14c | 73 | led2 = false; |
jstephens78 | 21:df9e8f45e14c | 74 | } |
jstephens78 | 21:df9e8f45e14c | 75 | while (game2 == true && game1 == false) { |
jstephens78 | 21:df9e8f45e14c | 76 | led2 = true; |
jstephens78 | 21:df9e8f45e14c | 77 | wave_file=fopen("/sd/WiiPlayAirHockey.wav","r"); |
jstephens78 | 21:df9e8f45e14c | 78 | waver.play(wave_file); |
jstephens78 | 21:df9e8f45e14c | 79 | fclose(wave_file); |
jstephens78 | 21:df9e8f45e14c | 80 | led2 = false; |
jstephens78 | 21:df9e8f45e14c | 81 | } |
dangulo7 | 1:d8cc5013651e | 82 | } |
dangulo7 | 1:d8cc5013651e | 83 | } |
dangulo7 | 1:d8cc5013651e | 84 | |
jstephens78 | 20:73e4f12277bd | 85 | void ledThread() |
jstephens78 | 11:e00a208bd85a | 86 | { |
jstephens78 | 11:e00a208bd85a | 87 | float x = 0.0; |
dangulo7 | 1:d8cc5013651e | 88 | while(1) { |
dangulo7 | 1:d8cc5013651e | 89 | //get a new random number for PWM |
dangulo7 | 1:d8cc5013651e | 90 | x = rand() / float(RAND_MAX); |
dangulo7 | 1:d8cc5013651e | 91 | //add some exponential brightness scaling |
dangulo7 | 1:d8cc5013651e | 92 | //for more of a fast flash effect |
dangulo7 | 1:d8cc5013651e | 93 | x = x*x*x; |
dangulo7 | 1:d8cc5013651e | 94 | Rgb = x; |
jstephens78 | 11:e00a208bd85a | 95 | rGb = x; |
jstephens78 | 11:e00a208bd85a | 96 | rgB = x; |
dangulo7 | 1:d8cc5013651e | 97 | //fast update rate for welding flashes |
dangulo7 | 1:d8cc5013651e | 98 | Thread::wait(20); |
dangulo7 | 1:d8cc5013651e | 99 | //add a random pause between welds |
jstephens78 | 11:e00a208bd85a | 100 | if (rand() / float(RAND_MAX) > 0.95) { |
dangulo7 | 1:d8cc5013651e | 101 | Rgb = 0; |
dangulo7 | 1:d8cc5013651e | 102 | rGb = 0; |
dangulo7 | 1:d8cc5013651e | 103 | rgB = 0; |
dangulo7 | 1:d8cc5013651e | 104 | Thread::wait(4000.0 * rand() / float(RAND_MAX)); |
dangulo7 | 1:d8cc5013651e | 105 | } |
jstephens78 | 11:e00a208bd85a | 106 | } |
dangulo7 | 1:d8cc5013651e | 107 | } |
jstephens78 | 16:6cf744b2623a | 108 | |
jstephens78 | 11:e00a208bd85a | 109 | int main() |
jstephens78 | 11:e00a208bd85a | 110 | { |
jstephens78 | 20:73e4f12277bd | 111 | // Launch four threads |
jstephens78 | 20:73e4f12277bd | 112 | Thread thread1(tetrisGame, osPriorityHigh); |
jstephens78 | 20:73e4f12277bd | 113 | Thread thread2(hockeyGame, osPriorityHigh); |
jsanchez307 | 23:214c0c828d98 | 114 | //Thread thread3(audioThread, osPriorityLow); |
jstephens78 | 20:73e4f12277bd | 115 | Thread thread4(ledThread, osPriorityLow); |
jstephens78 | 16:6cf744b2623a | 116 | |
jstephens78 | 20:73e4f12277bd | 117 | // The main thread goes on to blink LEDs |
jstephens78 | 12:5d913b57da7c | 118 | while (true) { |
jstephens78 | 21:df9e8f45e14c | 119 | led1 = 1; |
jstephens78 | 12:5d913b57da7c | 120 | Thread::wait(500); |
jstephens78 | 21:df9e8f45e14c | 121 | led1 = 0; |
jstephens78 | 12:5d913b57da7c | 122 | Thread::wait(500); |
jstephens78 | 20:73e4f12277bd | 123 | |
jstephens78 | 20:73e4f12277bd | 124 | PRINTF("[MAIN] Thread stacks: %lu %lu %lu %lu\r\n", |
jstephens78 | 20:73e4f12277bd | 125 | thread1.used_stack(), |
jstephens78 | 20:73e4f12277bd | 126 | thread2.used_stack(), |
jsanchez307 | 23:214c0c828d98 | 127 | //thread3.used_stack(), |
jstephens78 | 20:73e4f12277bd | 128 | thread4.used_stack()); |
jstephens78 | 20:73e4f12277bd | 129 | |
jstephens78 | 20:73e4f12277bd | 130 | // Launch into the air hockey game |
jsanchez307 | 23:214c0c828d98 | 131 | if (game1 != true) game1 = true; |
jstephens78 | 0:da114b98e013 | 132 | } |
jstephens78 | 0:da114b98e013 | 133 | } |