Guitar Hero Project on LPC1768 using push buttons, analog joystick. speaker and LCD Display

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SparkfunAnalogJoystick SDFileSystem_OldbutworkswithRTOS PinDetect

Revision:
3:6f639d41aef3
Parent:
2:c2afd0c426af
Child:
4:577404e4d53f
--- a/main.cpp	Tue Apr 18 13:00:09 2017 +0000
+++ b/main.cpp	Tue Nov 17 18:33:41 2020 +0000
@@ -1,23 +1,380 @@
+
 
 #include "mbed.h"
 #include "rtos.h"
 #include "SDFileSystem.h"
-#include "wave_player.h"
+#include "uLCD_4DGL.h"
+#include "PinDetect.h"
+
+Mutex lcd_mut;
+//SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin;
+//AnalogOut DACout(p18);
+//wave_player waver(&DACout);
+
+PinDetect pb_1(p9, PullUp);
+PinDetect pb_2(p10, PullUp);
+PinDetect pb_3(p11, PullUp);
+PinDetect pb_4(p12, PullUp);
+
+#define Main_Menu 0  // the first screen being shown
+#define Choose_Difficulty 1 // after hitting start, player chooses difficult
+#define Choose_Song 2       // after choosing difficullyt, choose song
+#define Start_Game 3      // the game has started
+#define Game_Over 4       // the game is done
+
+
+//colors
+#define YELLOW 16709376
+
+//speed based on difficulty
+#define Easy 2   
+#define Medium 5     
+#define Hard 8       
 
 
-SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+
+volatile int Game_State = Game_Over;
+volatile bool draw_enable = true;
+volatile int Speed = Easy; 
+
+FILE *wave_file;
 
-AnalogOut DACout(p18);
+void LCD(void const *args) {
+    myled1 = 1;
+    while(1) {
+         switch (Game_State) {
+            case Start_Game :
+               if (draw_enable) {
+                    lcd_mut.lock();
+                        uLCD.cls();
+                        uLCD.printf("Start_Game");
+                    lcd_mut.unlock();
+                }
+                break;
+            case Game_Over :
+               if (draw_enable) {
+                    draw_enable = false;
+                    lcd_mut.lock();
+                        uLCD.cls();
+                        uLCD.line(0, 0, 127, 0, RED);
+                        uLCD.line(127, 0, 127, 127, BLUE);
+                        uLCD.line(127, 127, 0, 127, GREEN);
+                        uLCD.line(0, 127, 0, 0, YELLOW);
+                        uLCD.text_width(1);
+                        uLCD.text_height(2);
+                        uLCD.text_string("Game Over",4,0,FONT_8X8, BLUE);
+                        
+                        uLCD.text_width(1);
+                        uLCD.text_height(1);
+                        uLCD.text_string("Score:",2,6,FONT_8X8, YELLOW);
+                        uLCD.text_string("Hits:",2,8,FONT_8X8, GREEN);
+                        uLCD.text_string("Misses:",2,10,FONT_8X8, RED);
+                        uLCD.text_height(2);
+                        uLCD.text_string("High Score:",2,6,FONT_8X8, WHITE);
+                        uLCD.text_height(1);
+                        
+                    lcd_mut.unlock();
+                }
+                break;
+            case Choose_Song :
+               if (draw_enable) {
+                    draw_enable = false;
+                    lcd_mut.lock();
+                        uLCD.cls();
+                        uLCD.text_width(1);
+                        uLCD.text_height(1);
+                        uLCD.locate(1,1);
+                        uLCD.color(BLUE);
+                        uLCD.text_underline(ON);
+                        uLCD.text_string("Choose Song",4,1,FONT_8X8, BLUE);
+                        uLCD.text_underline(OFF);
+                        uLCD.set_font(FONT_7X8);
+                        uLCD.triangle(64, 32,58, 40, 70, 40,  WHITE);
+                        uLCD.triangle(64, 92 ,58, 84, 70, 84,  WHITE);
+                        uLCD.color(GREEN);
+                        uLCD.rectangle(10,44,118, 80, LGREY);
+                        uLCD.text_width(2);
+                        uLCD.text_height(2);
+                        uLCD.text_string("Schools\nOut",1,3,FONT_8X8, GREEN);
+                        uLCD.text_width(1);
+                        uLCD.text_height(1);
+                    lcd_mut.unlock();
+                }
+                break;
+            case Choose_Difficulty :
+               if (draw_enable) {
+                    draw_enable = false;
+                    lcd_mut.lock();
+                        uLCD.cls();
+                        uLCD.text_width(1.5);
+                        uLCD.text_height(1.5);
+                        uLCD.locate(1,1);
+                        uLCD.color(BLUE);
+                        uLCD.text_underline(ON);
+                        uLCD.text_string("Choose Difficulty",1,1,FONT_8X8, BLUE);
+                        uLCD.text_underline(OFF);
+                        uLCD.set_font(FONT_7X8);
+                        uLCD.text_width(2);
+                        uLCD.text_height(2);
+                        uLCD.color(GREEN);
+                        uLCD.locate(1,2);
+                        uLCD.printf("1|EASY");
+                        uLCD.locate(1,4);
+                        uLCD.color(YELLOW);
+                        
+                        uLCD.printf("2|MEDIUM");
+                        uLCD.locate(1,6);
+                        uLCD.color(RED);
+                        uLCD.printf("3|HARD");
+                        uLCD.text_width(1);
+                        uLCD.text_height(1);
+                    lcd_mut.unlock();
+                }
+                break;
+            case Main_Menu :
+               if (draw_enable) {
+                    draw_enable = false;
+                    lcd_mut.lock();
+                        uLCD.cls();
+                        uLCD.line(0, 0, 127, 0, RED);
+                        uLCD.line(127, 0, 127, 127, BLUE);
+                        uLCD.line(127, 127, 0, 127, GREEN);
+                        uLCD.line(0, 127, 0, 0, YELLOW);
+                        uLCD.text_width(2);
+                        uLCD.text_height(2);
+                        uLCD.locate(2,2);
+                        uLCD.color(RED);
+                        uLCD.printf("Guitar");
+                        uLCD.color(BLUE);
+                        uLCD.locate(3,4);
+                        uLCD.printf("Hero");
+                        
+                        uLCD.text_width(1);
+                        uLCD.text_height(1);
+                        uLCD.locate(3,12);
+                        uLCD.color(GREEN);
+                        uLCD.printf("Press to start");
+                        
+                    lcd_mut.unlock();
+                }
+                break;
+            default:
+                break;
+        } 
+        Thread::wait(10);   
+    }  
+}
+void lights(void const *args) {
+    while(1) {
+        switch (Game_State) {
+            case Start_Game :
+                myled1 = 0;
+                myled2 = 0;
+                myled3 = 0;
+                myled4 = 1;
+                break;
+            case Game_Over :
+               myled1 = 1;
+                myled2 = 1;
+                myled3 = 1;
+                myled4 = 1;
+                break;
+            case Choose_Song :
+                myled1 = 0;
+                myled2 = 0;
+                myled3 = 1;
+                myled4 = 0;
+                break;
+            case Choose_Difficulty :
+               
+                myled1 = 0;
+                myled2 = 1;
+                myled3 = 0;
+                myled4 = 0;
+                    
+                
+                break;
+            case Main_Menu :
+               
+                myled1 = 1;
+                myled2 = 0;
+                myled3 = 0;
+                myled4 = 0;
+                
+                break;
+            default:
+                break;
+        } 
+        Thread::wait(500);
+    }    
+}
 
-wave_player waver(&DACout);
+void Thread3(void const *args) {
+   
+    while(1) {
+        Thread::wait(1000);
+    }
+
+}
+
+void Thread4(void const *args) {
+   
+    while(1){
+        Thread::wait(1000);
+    }
+        
+}
 
+void pb_1_pressed(void) {
+    switch (Game_State) {
+            case Start_Game :
+                draw_enable = true;
+                Game_State = Game_Over;
+                break;
+            case Game_Over :
+               draw_enable = true;
+                Game_State = Main_Menu;
+                break;
+            case Choose_Song :
+                draw_enable = true;
+                Game_State = Start_Game;
+                break;
+            case Choose_Difficulty :
+               
+                draw_enable = true;
+                Game_State = Choose_Song;
+                Speed = Easy;    
+                
+                break;
+            case Main_Menu :
+               
+                draw_enable = true;
+                Game_State = Choose_Difficulty;
+                
+                break;
+            default:
+                break;
+        } 
+}
+void pb_2_pressed(void) {
+        switch (Game_State) {
+            case Start_Game :
+                draw_enable = true;
+                Game_State = Game_Over;
+                break;
+            case Game_Over :
+               draw_enable = true;
+                Game_State = Main_Menu;
+                break;
+            case Choose_Song :
+                draw_enable = true;
+                Game_State = Start_Game;
+                break;
+            case Choose_Difficulty :
+               
+                draw_enable = true;
+                Game_State = Choose_Song;
+                Speed = Medium;
+                break;
+            case Main_Menu :
+               
+                draw_enable = true;
+                Game_State = Choose_Difficulty;
+                
+                break;
+            default:
+                break;
+        } 
+        
+}
+void pb_3_pressed(void) {
+        switch (Game_State) {
+            case Start_Game :
+                draw_enable = true;
+                Game_State = Game_Over;
+                break;
+            case Game_Over :
+               draw_enable = true;
+                Game_State = Main_Menu;
+                break;
+            case Choose_Song :
+                draw_enable = true;
+                Game_State = Start_Game;
+                break;
+            case Choose_Difficulty :
+               
+                draw_enable = true;
+                Game_State = Choose_Song;
+                Speed = Hard;
+                
+                break;
+            case Main_Menu :
+               
+                draw_enable = true;
+                Game_State = Choose_Difficulty;
+                
+                break;
+            default:
+                break;
+        } 
+}
+void pb_4_pressed(void) {
+        switch (Game_State) {
+            case Start_Game :
+                draw_enable = true;
+                Game_State = Game_Over;
+                break;
+            case Game_Over :
+               draw_enable = true;
+                Game_State = Main_Menu;
+                break;
+            case Choose_Song :
+                draw_enable = true;
+                Game_State = Start_Game;
+                break;
+            case Choose_Difficulty :
+                //not used
+                break;
+            case Main_Menu :
+               
+                draw_enable = true;
+                Game_State = Choose_Difficulty;
+                
+                break;
+            default:
+                break;
+        } 
+}
+        
 int main()
 {
-    FILE *wave_file;
-    printf("\r\n\nHello, wave world!\n\r");
+    
+    pb_1.attach_deasserted( &pb_1_pressed );
+    pb_2.attach_deasserted( &pb_2_pressed );
+    pb_3.attach_deasserted( &pb_3_pressed );
+    pb_4.attach_deasserted( &pb_4_pressed );
+    pb_1.setSampleFrequency();
+    pb_2.setSampleFrequency();
+    pb_3.setSampleFrequency();
+    pb_4.setSampleFrequency();
+    lcd_mut.lock();
+    uLCD.cls();
+    uLCD.printf("starting...");
+    uLCD.background_color(BLACK);
+    uLCD.baudrate(3000000);
+    lcd_mut.unlock();
     Thread::wait(1000);
-    wave_file=fopen("/sd/sample.wav","r");
-    if(wave_file==NULL) printf("file open error!\n\n\r");
-    waver.play(wave_file);
-    fclose(wave_file);
-}
\ No newline at end of file
+    Thread Thread1(LCD);
+    Thread Thread2(lights);
+
+    
+    while(1) {
+        Thread::wait(1000);
+    }
+    
+}