Sound update

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

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?

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);
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 }