Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
main.cpp
- Committer:
- jaybalar
- Date:
- 19 months ago
- Revision:
- 31:b08cc3c126d6
- Parent:
- 30:4d8aa9229bdd
File content as of revision 31:b08cc3c126d6:
#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"
#include "cylonbyc.h"
#define sample_freq 11025.0
///////////////////////////
// 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;
volatile int menu_flag = 0;
Serial pc(USBTX, USBRX);
Mutex pc_mutex;
//uLCD_4DGL uLCD(p28, p27, p29);
uLCD_4DGL uLCD(p13,p14,p30);
Mutex uLCD_mutex;
BluefruitController blue(p28,p27);
//BusIn navSwitch(p15, p16, p17, p19, p20);
Nav_Switch myNav(p20, p16, p17, p15, p19); // pins(up, down, left, right, fire)
SDFileSystem sd(p5, p6, p7, p8, "sd");
PwmOut Rgb(p23);
PwmOut rGb(p24);
PwmOut rgB(p25);
Ticker sampletick;
AnalogOut speaker(p18);
//Speaker 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 //
//////////////////////
int i = 0;
int j = 0;
int k = 0;
void audio_sample ()
{
if (game1) {
speaker.write_u16(tetris[i]);
i++;
}
if (game2) {
speaker.write_u16(air_hockey[j]);
j++;
}
if (!game1 && !game2) {
speaker.write_u16(mii_menu[k]);
k++;
}
if (k>= 71904) {
k = 0;
}
if (i>= 72584) {
i = 0;
}
if (j>= 72488) {
j = 0;
}
}
void audioThread()
{
while (true) {
//FILE *wave_file;
while (game1 == false && game2 == false) {
sampletick.attach(&audio_sample, 1.0 / sample_freq);
//DACout.PlayNote(369.99, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(466.16, 0.2, 1);
// DACout.PlayNote(554.37, 0.2, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(466.16, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(369.99, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(293.66, 0.2, 1);
// DACout.PlayNote(293.66, 0.2, 1);
// DACout.PlayNote(293.66, 0.2, 1);
// DACout.PlayNote(0, 0.8, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(277.18, 0.4, 1);
// DACout.PlayNote(293.66, 0.2, 1);
// DACout.PlayNote(369.99, 0.2, 1);
// DACout.PlayNote(466.16, 0.2, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(554.37, 0.2, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(466.16, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(369.99, 0.4, 1);
// DACout.PlayNote(659.25, 0.4, 1);
// DACout.PlayNote(622.25, 0.4, 1);
// DACout.PlayNote(587.33, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(0, 0.4, 1);
//
//
//
// DACout.PlayNote(392.00, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(554.37, 0.2, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(369.99, 0.2, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(554.37, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(329.00, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(523.25, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(329.00, 0.4, 1);
// DACout.PlayNote(369.99, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(329.63, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(277.18, 0.2, 1);
// DACout.PlayNote(277.18, 0.2, 1);
// DACout.PlayNote(277.18, 0.2, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(277.18, 0.2, 1);
// DACout.PlayNote(277.18, 0.2, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(277.18, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(0, 0.4, 1);
// DACout.PlayNote(311.13, 0.4, 1);
// if(game1 == true || game2 == true) break;
// DACout.PlayNote(293.66, 0.4, 1);
/*led2 = true;
wave_file=fopen("/sd/MiiMenu.wav","r");
PRINTF("Opening");
waver.play(wave_file);
fclose(wave_file);
led2 = false;*/
}
while (game1 == true && game2 == false) {
sampletick.attach(&audio_sample, 1.0 / sample_freq);
//DACout.PlayNote(659.25, 0.3, 1);
// DACout.PlayNote(493.88, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(493.88, 0.3, 1);
// DACout.PlayNote(440.00, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(440.00, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(659.25, 0.3, 1);
// DACout.PlayNote(587.33, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(493.88, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(587.33, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(659.25, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(440.00, 0.3, 1);
// DACout.PlayNote(440.00, 0.3, 1);
// if(game1 != true && game2 == false) break;
//
// DACout.PlayNote(583.33, 0.3, 1);
// DACout.PlayNote(698.46, 0.3, 1);
// DACout.PlayNote(880.00, 0.3, 1);
// DACout.PlayNote(783.99, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(698.46, 0.3, 1);
// DACout.PlayNote(659.25, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(659.25, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.3, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(493.88, 0.3, 1);
// DACout.PlayNote(493.88, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(587.33, 0.3, 1);
// DACout.PlayNote(659.25, 0.3, 1);
// DACout.PlayNote(523.35, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(440.00, 0.3, 1);
// DACout.PlayNote(440.00, 0.3, 1);
/* led2 = true;
wave_file=fopen("/sd/tetris.wav","r");
waver.play(wave_file);
fclose(wave_file);
led2 = false;*/
}
while (game2 == true && game1 == false) {
sampletick.attach(&audio_sample, 1.0 / sample_freq);
//DACout.PlayNote(329.63, 0.6, 1);
// DACout.PlayNote(349.23, 0.6, 1);
// DACout.PlayNote(392.00, 0.15, 1);
// DACout.PlayNote(523.25, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(493.88, 0.15, 1);
// DACout.PlayNote(523.25, 0.15, 1);
// DACout.PlayNote(392.00, 0.15, 1);
// DACout.PlayNote(329.63, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(261.63, 0.15, 1);
// DACout.PlayNote(293.66, 0.15, 1);
// DACout.PlayNote(329.33, 0.15, 1);
// DACout.PlayNote(293.66, 0.6, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(293.66, 1.2, 1);
// DACout.PlayNote(329.63, 0.6, 1);
// DACout.PlayNote(349.23, 0.3, 1);
// DACout.PlayNote(329.63, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(349.23, 0.15, 1);
//
//
// DACout.PlayNote(392.00, 0.15, 1);
// DACout.PlayNote(523.25, 0.15, 1);
// DACout.PlayNote(587.33, 0.15, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.1, 1);
// DACout.PlayNote(659.25, 0.1, 1);
// DACout.PlayNote(698.46, 0.15, 1);
// DACout.PlayNote(659.25, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.15, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(392.00, 0.15, 1);
// DACout.PlayNote(440.00, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(440.00, 0.15, 1);
// DACout.PlayNote(587.33, 0.15, 1);
// DACout.PlayNote(587.33, 0.1, 1);
// DACout.PlayNote(587.33, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.1, 1);
// DACout.PlayNote(659.25, 0.1, 1);
// DACout.PlayNote(698.46, 0.15, 1);
// DACout.PlayNote(659.25, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.15, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(392.00, 0.3, 1);
// DACout.PlayNote(392.00, 0.6, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(392.00, 0.15, 1);
// DACout.PlayNote(587.33, 0.1, 1);
// DACout.PlayNote(659.25, 0.1, 1);
// DACout.PlayNote(698.46, 0.15, 1);
// DACout.PlayNote(659.25, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.15, 1);
// DACout.PlayNote(523.25, 0.3, 1);
// DACout.PlayNote(783.99, 0.3, 1);
// DACout.PlayNote(783.99, 0.6, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(783.99, 0.15, 1);
// DACout.PlayNote(783.99, 0.1, 1);
// DACout.PlayNote(880.00, 0.1, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(932.33, 0.15, 1);
// DACout.PlayNote(880.00, 0.15, 1);
// DACout.PlayNote(783.99, 0.15, 1);
// DACout.PlayNote(698.46, 0.6, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(830.61, 0.15, 1);
// DACout.PlayNote(783.99, 0.15, 1);
// DACout.PlayNote(698.46, 0.15, 1);
// DACout.PlayNote(622.25, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(739.99, 0.15, 1);
// DACout.PlayNote(698.46, 0.1, 1);
// DACout.PlayNote(698.46, 0.15, 1);
// DACout.PlayNote(622.25, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(554.37, 0.15, 1);
// DACout.PlayNote(415.30, 0.15, 1);
// DACout.PlayNote(349.23, 0.15, 1);
// DACout.PlayNote(277.18, 0.15, 1);
// DACout.PlayNote(311.13, 0.3, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(554.37, 0.3, 1);
// DACout.PlayNote(587.33, 0.6, 1);
// DACout.PlayNote(587.33, 0.6, 1);
// DACout.PlayNote(587.33, 0.15, 1);
// DACout.PlayNote(392.00, 0.15, 1);
// if(game1 != true && game2 == false) break;
// DACout.PlayNote(587.33, 0.3, 1);
// DACout.PlayNote(783.99, 0.3, 1);
// DACout.PlayNote(783.99, 0.6, 1);
// DACout.PlayNote(783.99, 1.2, 1);
// if(game1 != true && game2 == false) break;
/*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) {
if (!game1 && !game2) {
//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));
}
}
else if (game1) {
}
}
}
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
//Speaker mySpeaker(p18);
// loops forever playing two notes on speaker using analog samples
//PRINTF("test");
// while(1) {
// //mySpeaker.PlayNote(969.0, 0.5, 1.0);
//// mySpeaker.PlayNote(800.0, 0.5, 1.0);
// //PRINTF("loop");
// }
while (true) {
led1 = 1;
Thread::wait(500);
led1 = 0;
Thread::wait(500);
if(!game1 && !game2 && menu_flag==0){
uLCD.cls();
uLCD.color(WHITE);
uLCD.text_height(2);
uLCD.text_width(2);
uLCD.locate(2,0);
uLCD.printf("MENU:\n");
uLCD.printf("UP:\n");
uLCD.printf("Tetris \n");
uLCD.printf("\n");
uLCD.printf("DOWN:\n");
uLCD.printf("Air\n");
uLCD.printf("Hockey");
menu_flag=1;
}
//DACout.PlayNote(50, 1.0/2.5, 0.08);
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 (game1 != true && game2 != true && myNav.up()){
uLCD.cls();
game1 = true;
}
if (game2 != true && game1 != true && myNav.down()){
uLCD.cls();
game2 = true;
}
}
}