Sound update

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

main.cpp

Committer:
jstephens78
Date:
22 months ago
Revision:
20:73e4f12277bd
Parent:
19:6d9bee043ede
Child:
21:df9e8f45e14c

File content as of revision 20:73e4f12277bd:

#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, p18, p19);

SDFileSystem sd(p5, p6, p7, p8, "sd");
PwmOut Rgb(p23);
PwmOut rGb(p24);
PwmOut rgB(p25);
PwmOut PWMout(p21);
//AnalogOut DACout(p20);
//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 myled(LED1);



//////////////////////
// MAIN.CPP THREADS //
//////////////////////
void audioThread()
{
    while(true) Thread::wait(1000);
    /*
    FILE *wave_file;
    PWMout.period(1.0/400000.0);
    while (game1 == false && game2 == false) {
        wave_file=fopen("/sd/MiiMenu.wav","r");
        waver.play(wave_file);
        fclose(wave_file);
    }
    while (game1 == true && game2 == false) {
        wave_file=fopen("/sd/tetris.wav","r");
        waver.play(wave_file);
        fclose(wave_file);
    }
    while (game2 == true && game1 == false) {
        wave_file=fopen("/sd/WiiPlayAirHockey.wav","r");
        waver.play(wave_file);
        fclose(wave_file);
    }
    */
}

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) {
        myled = 1;
        Thread::wait(500);
        myled = 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;
    }
}