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