ECE 4180 jubeat

Dependencies:   4DGL-uLCD-SE SDFileSystem TextLCD mbed-rtos mbed wave_player

Revision:
0:c3c8793d0091
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Mar 16 13:38:50 2016 +0000
@@ -0,0 +1,197 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "uLCD_4DGL.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+#include "VS1002.h" 
+#include <mpr121.h>
+
+//SDFileSystem sd(p5, p6, p7, p8, "sd");
+uLCD_4DGL uLCD(p28,p27,p30);
+Serial pc(USBTX, USBRX);
+VS1002 mp3(p5, p6, p7, p8,"sd",p11, p12 ,p13, p14, p23, p22, p21, p20); 
+LocalFileSystem local("local");
+//AnalogOut DACout(p18); // used to play sound on speaker
+//wave_player waver(&DACout);
+//This is for the touchpad
+I2C i2c(p9, p10);
+InterruptIn interrupt(p26);
+Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
+
+int start = 0;
+
+int new_song_number=1;  //Variable to store the Song Number
+int volume_set=-1;     //Variable to store the Volume
+int previous_volume;    //Variable to store the volume when muted
+bool pause=false;       //Variable to store the status of Pause button 
+bool mute=false;        //Variable to store the status of mute button
+
+int check=0;    //Capacitative touch generates interrupt on both press and release. This variable tracks this and updates only on press.
+char *song_name[6]={"18 till I Die","Summer of 69","Boulevard", "Serenity","Crawling","In the end"}; //Array of song names entered manually
+int chosennum=-1;
+int playing=0;
+int score=0;
+int fullscore;
+
+Mutex ulcd_mutex;
+Mutex sd_mutex;
+
+void fallInterrupt() {
+    int key_code=0;
+    int i=0;
+    int value=mpr121.read(0x00);
+    value +=mpr121.read(0x01)<<8;
+    // LED demo mod by J. Hamblen
+    //pc.printf("MPR value: %x \r\n", value);
+    i=0;
+    // puts key number out to LEDs for demo
+    for (i=0; i<12; i++) {
+        if (((value>>i)&0x01)==1) key_code=i+1;
+        }
+    check=1;
+    //pc.printf("%d  ",playing);
+    //if(!playing){
+    chosennum=key_code;
+    //}
+}
+
+class square {
+    public:
+    int startx,starty,side,pos;
+    
+
+    /*function*/
+    square(){};
+    square(int sx,int sy,int s,int p):startx(sx),starty(sy),side(s),pos(p){};
+    void set(int sx, int sy, int s,int p){startx = sx;starty = sy;side = s;pos = p;};
+    // draw the block on the LCD
+    void draw() {//draw a empty block on the LCD
+        uLCD.rectangle(startx,starty,startx+side,starty+side,0x00FF00);
+    }
+    void show() {//emerge the color inside the block
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0x333300);
+        wait(0.1);
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0x666600);
+        wait(0.1);
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0x999900);
+        wait(0.1);
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0xCCCC00);
+        wait(0.1);
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0xFFFF00);
+        wait(0.1);
+        if(pos==chosennum){hit();score++;}
+        else{miss();}
+    
+    }
+    void hit()  {
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0x00FF00);
+        wait(0.1);
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0x000000);
+    }
+    void miss() {
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0xFF0000);
+        wait(0.1);
+        uLCD.filled_rectangle(startx+4, starty+4, startx+side-4, starty+side-4, 0x000000);
+    }
+};
+
+void graph(void const *args)
+{   
+    while(!start){wait(0.5);}
+    pc.printf("i can start from now");
+    ulcd_mutex.lock();
+    square a[9];
+    a[0].set(1,1,40,1);
+    a[1].set(44,1,40,2);
+    a[2].set(87,1,40,3);
+    a[3].set(1,44,40,5);
+    a[4].set(44,44,40,6);
+    a[5].set(87,44,40,7);
+    a[6].set(1,87,40,9);
+    a[7].set(44,87,40,10);
+    a[8].set(87,87,40,11);
+    a[0].draw();a[1].draw();a[2].draw();
+    a[3].draw();a[4].draw();a[5].draw();
+    a[6].draw();a[7].draw();a[8].draw();
+    
+    FILE *fp = fopen("/local/2.txt", "r");
+        int screen=-1;
+        int waitmm=0;
+        int numnode=-1;
+        int counter = 0;
+        fscanf(fp,"%d",&numnode);
+        fullscore=numnode;
+        while(counter < numnode) {
+        fscanf(fp,"%d %d",&screen, &waitmm);
+        //uLCD.printf("%d %d\n", screen, waitmm);
+        a[screen].show();
+        wait(float(waitmm)/1000);
+        counter++;
+    }
+    ulcd_mutex.unlock();
+
+}
+
+int main() {
+    //Thread thread2(speaker);
+    interrupt.fall(&fallInterrupt);
+    interrupt.mode(PullUp);
+    
+    Thread thread2(graph);
+    
+    
+    uLCD.cls();
+    uLCD.media_init();
+    uLCD.set_sector_address(0x0000, 0x0099);
+    uLCD.display_video(0,0);
+    uLCD.cls();
+    
+    ulcd_mutex.lock();
+    uLCD.printf("This is game of Jubeat\n\npick a song you want to play\n\n1. Lovers on the Sun\n2.Man At Arms\n");
+    while(!check){wait(0.1);}
+    uLCD.printf("You chosen song: %d",chosennum);
+    wait(1);
+    uLCD.cls();
+    ulcd_mutex.unlock();
+    pc.printf("mutex unlocked!\n");
+    /*
+    square a[9];
+    a[0].set(1,1,40);
+    a[1].set(44,1,40);
+    a[2].set(87,1,40);
+    a[3].set(1,44,40);
+    a[4].set(44,44,40);
+    a[5].set(87,44,40);
+    a[6].set(1,87,40);
+    a[7].set(44,87,40);
+    a[8].set(87,87,40);
+    a[0].draw();a[1].draw();a[2].draw();
+    a[3].draw();a[4].draw();a[5].draw();
+    a[6].draw();a[7].draw();a[8].draw();
+    */
+    
+    mp3._RST = 1; 
+    mp3.cs_high();                                  //chip disabled 
+    mp3.sci_initialise();                           //initialise MBED 
+    mp3.sci_write(0x00,(SM_SDINEW+SM_STREAM+SM_DIFF)); 
+    mp3.sci_write(0x03, 0x9800); 
+    mp3.sdi_initialise();
+    
+    start=1; 
+    //while(1)
+    //{
+         //playing=1;
+         mp3.play_song(1);
+         //playing=0;
+    //}   
+    
+    ulcd_mutex.lock();
+    uLCD.cls();
+
+    uLCD.printf("congratulation!\n\nYour score is:\n\n%d \nout of %d",score,fullscore);
+    wait(3);
+    ulcd_mutex.unlock();
+    while(1){}
+    
+
+}