Sound update

Dependencies:   4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed

Committer:
dangulo7
Date:
Thu Dec 08 00:34:39 2022 +0000
Revision:
24:3b29ae4d6171
Parent:
23:214c0c828d98
Child:
25:c3eb6c1a2dfb
Menu Change;

Who changed what in which revision?

UserRevisionLine numberNew 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);
dangulo7 24:3b29ae4d6171 116 int x = 0;
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);
dangulo7 24:3b29ae4d6171 123 if(!game1 && !game2 && x==0){
dangulo7 24:3b29ae4d6171 124 uLCD.color(WHITE);
dangulo7 24:3b29ae4d6171 125 uLCD.text_height(1);
dangulo7 24:3b29ae4d6171 126 uLCD.text_width(1);
dangulo7 24:3b29ae4d6171 127 uLCD.printf("UP:\n");
dangulo7 24:3b29ae4d6171 128 uLCD.printf("Tetris \n");
dangulo7 24:3b29ae4d6171 129 uLCD.printf("\n");
dangulo7 24:3b29ae4d6171 130 uLCD.printf("DOWN:\n");
dangulo7 24:3b29ae4d6171 131 uLCD.printf("Air\n");
dangulo7 24:3b29ae4d6171 132 uLCD.printf("Hockey");
dangulo7 24:3b29ae4d6171 133 x=1;
dangulo7 24:3b29ae4d6171 134 }
jstephens78 20:73e4f12277bd 135
jstephens78 20:73e4f12277bd 136 PRINTF("[MAIN] Thread stacks: %lu %lu %lu %lu\r\n",
jstephens78 20:73e4f12277bd 137 thread1.used_stack(),
jstephens78 20:73e4f12277bd 138 thread2.used_stack(),
jsanchez307 23:214c0c828d98 139 //thread3.used_stack(),
jstephens78 20:73e4f12277bd 140 thread4.used_stack());
jstephens78 20:73e4f12277bd 141
jstephens78 20:73e4f12277bd 142 // Launch into the air hockey game
dangulo7 24:3b29ae4d6171 143 if (game1 != true && myNav.up()){
dangulo7 24:3b29ae4d6171 144 uLCD.cls();
dangulo7 24:3b29ae4d6171 145 game1 = true;
dangulo7 24:3b29ae4d6171 146 }
dangulo7 24:3b29ae4d6171 147 if (game2 != true && myNav.down()){
dangulo7 24:3b29ae4d6171 148 uLCD.cls();
dangulo7 24:3b29ae4d6171 149 game2 = true;
dangulo7 24:3b29ae4d6171 150 }
jstephens78 0:da114b98e013 151 }
jstephens78 0:da114b98e013 152 }