Sound update

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

Committer:
jsanchez307
Date:
Thu Dec 08 02:12:14 2022 +0000
Revision:
26:163d7ca8c42d
Parent:
25:c3eb6c1a2dfb
Child:
27:a09981ebd532
No speaker. LED works for Tetris by going through RGB one at a time. LCD successfully clears the screen after Tetris is in Game Over and goes to the Menu.

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