mbed1
Dependencies: 4DGL SDFileSystem mbed-rtos mbed
Fork of drums by
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 #include "TFT_4DGL.h" 00004 #include "note.h" 00005 #include "song.h" 00006 #include <vector> 00007 00008 00009 // Define all the ports 00010 // Serial pc(USBTX, USBRX); 00011 TFT_4DGL screen(p9,p10,p11); // serial tx, serial rx, reset pin; 00012 AnalogIn r1(p18); 00013 AnalogIn r2(p19); 00014 AnalogIn r3(p20); 00015 DigitalOut musicOn(p22); 00016 DigitalIn button(p21); 00017 00018 // Define objects 00019 // Ticker beatCounter; 00020 DigitalOut led1(LED1); 00021 DigitalOut led2(LED2); 00022 DigitalOut led3(LED3); 00023 00024 Thread t1; 00025 Mutex stdio_mutex; 00026 00027 // Define and initiate global variables 00028 std::vector<Note> noteArr; 00029 int beatNumber = 0; 00030 char buffer[2]; 00031 int skipped = 0; 00032 int temp; 00033 int score = 0; 00034 Song s = Song(1); 00035 //float r1; 00036 //float r2; 00037 //float r3; 00038 00039 void initiateScreen() { 00040 // Initiate the screen and the background 00041 screen.baudrate(3000000); 00042 screen.display_control(0x0c, 0x01); 00043 screen.background_color(0x000000); 00044 00045 // Draw the frame 00046 screen.rectangle(192, 120, 447, 450, 0xD38A41); 00047 screen.line(256, 120, 192, 450, 0x96411F); 00048 screen.line(296, 120, 277, 450, 0x96411F); 00049 screen.line(332, 120, 362, 450, 0x96411F); 00050 screen.line(372, 120, 447, 450, 0x96411F); 00051 screen.triangle(192, 120, 192, 450, 256, 120, 0x000000); 00052 screen.triangle(372, 120, 447, 450, 447, 120, 0x000000); 00053 screen.rectangle(447, 120, 450, 450, 0x000000); 00054 00055 screen.rectangle(256, 100, 296, 120, 0xFF0000); 00056 screen.rectangle(296, 100, 332, 120, 0x00FF00); 00057 screen.rectangle(332, 100, 372, 120, 0x0000FF); 00058 00059 // screen.rectangle(192,450,277,470,0xFF0000); 00060 // screen.rectangle(277,450,362,470,0x00FF00); 00061 // screen.rectangle(362,450,447,470,0x0000FF); 00062 00063 // Define the points 00064 screen.graphic_string("POINTS:", 30, 100, FONT_8X8, WHITE, 2, 2); 00065 screen.graphic_string("ROCK YOU", 430, 100, FONT_8X8, WHITE, 2, 2); 00066 00067 } 00068 00069 void beatMover() { 00070 while (true) { 00071 // Check if the song is ended 00072 if (beatNumber < s.length) { 00073 // Read the next beat (0,1,2,3) 00074 temp = s.notes[beatNumber++]; 00075 // Check if there's a beat/note (not 0) 00076 if (temp) { 00077 // If beat/note exists, create the object for it and push 00078 // it to the array of current notes on the screen 00079 Note n1 = Note(temp); 00080 noteArr.push_back(n1); 00081 } 00082 //beatNumber++; 00083 00084 for(int i = skipped; i < noteArr.size(); i++) { 00085 if (noteArr[i].consumed) { 00086 skipped += 1; 00087 } else { 00088 stdio_mutex.lock(); 00089 noteArr[i].drawNote(); 00090 stdio_mutex.unlock(); 00091 } 00092 } 00093 } else { 00094 stdio_mutex.lock(); 00095 screen.rectangle(0,0,640,480,0x000000); 00096 screen.graphic_string("GAME OVER", 20, 200, FONT_8X8, WHITE, 2, 2); 00097 stdio_mutex.unlock(); 00098 wait(30); 00099 00100 } 00101 // Thread::wait(0.1); 00102 } 00103 } 00104 00105 //void checkHits() { 00106 // 00107 //} 00108 00109 int main() { 00110 button.mode(PullDown); 00111 00112 screen.text_string("DRUM HERO 1.0", 15, 8, FONT_8X8, WHITE); 00113 screen.text_string("PRESS THE BUTTON", 14, 16, FONT_8X8, WHITE); 00114 screen.text_string("TO START", 18, 19, FONT_8X8, WHITE); 00115 00116 musicOn = 0; 00117 while(!musicOn) { 00118 if(button) { 00119 musicOn = 1; 00120 } 00121 } 00122 00123 // Initiate the screen and the main graphics 00124 initiateScreen(); 00125 00126 t1.start(beatMover); 00127 // t2.start(checkHits); 00128 00129 while(true) { 00130 // r1 = drum1.read(); 00131 // r2 = drum2.read(); 00132 // r3 = drum3.read(); 00133 00134 if (r1 > 0.1) { 00135 // screen.rectangle(192,450,277,470,0xFF0000); 00136 led1 = 1; 00137 // if (screen.read_pixel(230, 420) == 0xFF0000) { 00138 // score++; 00139 // } 00140 } else if (r2 > 0.1) { 00141 // screen.rectangle(277,450,362,470,0x00FF00); 00142 led2 = 1; 00143 // if (screen.read_pixel(320, 420) == 0x00FF00) { 00144 // score++; 00145 // } 00146 } else if (r3 > 0.1) { 00147 // screen.rectangle(362,450,447,470,0x0000FF); 00148 led3 = 1; 00149 // if (screen.read_pixel(405, 420) == 0x0000FF) { 00150 // score++; 00151 // } 00152 } else { 00153 // screen.rectangle(192,450,447,470,0x000000); 00154 led1 = 0; 00155 led2 = 0; 00156 led3 = 0; 00157 } 00158 sprintf(buffer,"%d",score); 00159 stdio_mutex.lock(); 00160 screen.text_string(buffer, 5, 7, FONT_8X8, WHITE); 00161 stdio_mutex.unlock(); 00162 // Thread::wait(0.01); 00163 } 00164 00165 }
Generated on Thu Jul 14 2022 05:04:17 by 1.7.2