Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
main.cpp
- Committer:
- jstephens78
- Date:
- 22 months ago
- Revision:
- 21:df9e8f45e14c
- Parent:
- 20:73e4f12277bd
- Child:
- 23:214c0c828d98
File content as of revision 21:df9e8f45e14c:
#include "mbed.h" #include "rtos.h" #include "globals.h" #include "hockey.h" #include "tetris.h" #include "Speaker.h" #include "SDFileSystem.h" #include "uLCD_4DGL.h" /////////////////////////// // GLOBALS.H DEFINITIONS // /////////////////////////// // The following variables are declared as extern in "globals.h", and we define // them here: volatile bool game1 = false; volatile bool game2 = false; Serial pc(USBTX, USBRX); Mutex pc_mutex; //uLCD_4DGL uLCD(p28, p27, p29); uLCD_4DGL uLCD(p9,p10,p30); Mutex uLCD_mutex; BluefruitController blue(p13,p14); BusIn navSwitch(p15, p16, p17, p19, p20); SDFileSystem sd(p5, p6, p7, p8, "sd"); PwmOut Rgb(p23); PwmOut rGb(p24); PwmOut rgB(p25); AnalogOut DACout(p18); wave_player waver(&DACout); //////////////////////////////// // MAIN.CPP LOCAL DEFINITIONS // //////////////////////////////// // The following variables are *not* from "globals.h" and are not meant for // reference outside of main.cpp DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); ////////////////////// // MAIN.CPP THREADS // ////////////////////// void audioThread() { while (true) { FILE *wave_file; while (game1 == false && game2 == false) { led2 = true; wave_file=fopen("/sd/MiiMenu.wav","r"); waver.play(wave_file); fclose(wave_file); led2 = false; } while (game1 == true && game2 == false) { led2 = true; wave_file=fopen("/sd/tetris.wav","r"); waver.play(wave_file); fclose(wave_file); led2 = false; } while (game2 == true && game1 == false) { led2 = true; wave_file=fopen("/sd/WiiPlayAirHockey.wav","r"); waver.play(wave_file); fclose(wave_file); led2 = false; } } } void ledThread() { float x = 0.0; while(1) { //get a new random number for PWM x = rand() / float(RAND_MAX); //add some exponential brightness scaling //for more of a fast flash effect x = x*x*x; Rgb = x; rGb = x; rgB = x; //fast update rate for welding flashes Thread::wait(20); //add a random pause between welds if (rand() / float(RAND_MAX) > 0.95) { Rgb = 0; rGb = 0; rgB = 0; Thread::wait(4000.0 * rand() / float(RAND_MAX)); } } } int main() { // Launch four threads Thread thread1(tetrisGame, osPriorityHigh); Thread thread2(hockeyGame, osPriorityHigh); Thread thread3(audioThread, osPriorityLow); Thread thread4(ledThread, osPriorityLow); // The main thread goes on to blink LEDs while (true) { led1 = 1; Thread::wait(500); led1 = 0; Thread::wait(500); PRINTF("[MAIN] Thread stacks: %lu %lu %lu %lu\r\n", thread1.used_stack(), thread2.used_stack(), thread3.used_stack(), thread4.used_stack()); // Launch into the air hockey game if (game2 != true) game2 = true; } }