drum

Dependencies:   4DGL SDFileSystem mbed-rtos mbed

Fork of drums by Can Kabuloglu

Committer:
ckabuloglu
Date:
Sun Apr 30 00:55:41 2017 +0000
Revision:
3:54d4226a7d5e
Parent:
2:5daa4d35a676
Child:
4:d135d66c55e2
mbed1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ckabuloglu 3:54d4226a7d5e 1 #include "mbed.h"
ckabuloglu 3:54d4226a7d5e 2 #include "rtos.h"
ckabuloglu 3:54d4226a7d5e 3 #include "TFT_4DGL.h"
ckabuloglu 3:54d4226a7d5e 4 #include "note.h"
ckabuloglu 3:54d4226a7d5e 5 #include "song.h"
ckabuloglu 3:54d4226a7d5e 6 #include <vector>
ckabuloglu 3:54d4226a7d5e 7
ckabuloglu 3:54d4226a7d5e 8
ckabuloglu 3:54d4226a7d5e 9 // Define all the ports
ckabuloglu 3:54d4226a7d5e 10 // Serial pc(USBTX, USBRX);
ckabuloglu 3:54d4226a7d5e 11 TFT_4DGL screen(p9,p10,p11); // serial tx, serial rx, reset pin;
ckabuloglu 3:54d4226a7d5e 12 AnalogIn r1(p18);
ckabuloglu 3:54d4226a7d5e 13 AnalogIn r2(p19);
ckabuloglu 3:54d4226a7d5e 14 AnalogIn r3(p20);
ckabuloglu 3:54d4226a7d5e 15 DigitalOut musicOn(p22);
ckabuloglu 3:54d4226a7d5e 16 DigitalIn button(p21);
ckabuloglu 3:54d4226a7d5e 17
ckabuloglu 3:54d4226a7d5e 18 // Define objects
ckabuloglu 3:54d4226a7d5e 19 // Ticker beatCounter;
ckabuloglu 3:54d4226a7d5e 20 DigitalOut led1(LED1);
ckabuloglu 3:54d4226a7d5e 21 DigitalOut led2(LED2);
ckabuloglu 3:54d4226a7d5e 22 DigitalOut led3(LED3);
ckabuloglu 3:54d4226a7d5e 23
ckabuloglu 3:54d4226a7d5e 24 Thread t1;
ckabuloglu 3:54d4226a7d5e 25 Mutex stdio_mutex;
ckabuloglu 3:54d4226a7d5e 26
ckabuloglu 3:54d4226a7d5e 27 // Define and initiate global variables
ckabuloglu 3:54d4226a7d5e 28 std::vector<Note> noteArr;
ckabuloglu 3:54d4226a7d5e 29 int beatNumber = 0;
ckabuloglu 3:54d4226a7d5e 30 char buffer[2];
ckabuloglu 3:54d4226a7d5e 31 int skipped = 0;
ckabuloglu 3:54d4226a7d5e 32 int temp;
ckabuloglu 3:54d4226a7d5e 33 int score = 0;
ckabuloglu 3:54d4226a7d5e 34 Song s = Song(1);
ckabuloglu 3:54d4226a7d5e 35 //float r1;
ckabuloglu 3:54d4226a7d5e 36 //float r2;
ckabuloglu 3:54d4226a7d5e 37 //float r3;
ckabuloglu 3:54d4226a7d5e 38
ckabuloglu 3:54d4226a7d5e 39 void initiateScreen() {
ckabuloglu 3:54d4226a7d5e 40 // Initiate the screen and the background
ckabuloglu 3:54d4226a7d5e 41 screen.baudrate(3000000);
ckabuloglu 3:54d4226a7d5e 42 screen.display_control(0x0c, 0x01);
ckabuloglu 3:54d4226a7d5e 43 screen.background_color(0x000000);
ckabuloglu 3:54d4226a7d5e 44
ckabuloglu 3:54d4226a7d5e 45 // Draw the frame
ckabuloglu 3:54d4226a7d5e 46 screen.rectangle(192, 120, 447, 450, 0xD38A41);
ckabuloglu 3:54d4226a7d5e 47 screen.line(256, 120, 192, 450, 0x96411F);
ckabuloglu 3:54d4226a7d5e 48 screen.line(296, 120, 277, 450, 0x96411F);
ckabuloglu 3:54d4226a7d5e 49 screen.line(332, 120, 362, 450, 0x96411F);
ckabuloglu 3:54d4226a7d5e 50 screen.line(372, 120, 447, 450, 0x96411F);
ckabuloglu 3:54d4226a7d5e 51 screen.triangle(192, 120, 192, 450, 256, 120, 0x000000);
ckabuloglu 3:54d4226a7d5e 52 screen.triangle(372, 120, 447, 450, 447, 120, 0x000000);
ckabuloglu 3:54d4226a7d5e 53 screen.rectangle(447, 120, 450, 450, 0x000000);
ckabuloglu 3:54d4226a7d5e 54
ckabuloglu 3:54d4226a7d5e 55 screen.rectangle(256, 100, 296, 120, 0xFF0000);
ckabuloglu 3:54d4226a7d5e 56 screen.rectangle(296, 100, 332, 120, 0x00FF00);
ckabuloglu 3:54d4226a7d5e 57 screen.rectangle(332, 100, 372, 120, 0x0000FF);
ckabuloglu 3:54d4226a7d5e 58
ckabuloglu 3:54d4226a7d5e 59 // screen.rectangle(192,450,277,470,0xFF0000);
ckabuloglu 3:54d4226a7d5e 60 // screen.rectangle(277,450,362,470,0x00FF00);
ckabuloglu 3:54d4226a7d5e 61 // screen.rectangle(362,450,447,470,0x0000FF);
ckabuloglu 3:54d4226a7d5e 62
ckabuloglu 3:54d4226a7d5e 63 // Define the points
ckabuloglu 3:54d4226a7d5e 64 screen.graphic_string("POINTS:", 30, 100, FONT_8X8, WHITE, 2, 2);
ckabuloglu 3:54d4226a7d5e 65 screen.graphic_string("ROCK YOU", 430, 100, FONT_8X8, WHITE, 2, 2);
ckabuloglu 3:54d4226a7d5e 66
ckabuloglu 3:54d4226a7d5e 67 }
ckabuloglu 3:54d4226a7d5e 68
ckabuloglu 3:54d4226a7d5e 69 void beatMover() {
ckabuloglu 3:54d4226a7d5e 70 while (true) {
ckabuloglu 3:54d4226a7d5e 71 // Check if the song is ended
ckabuloglu 3:54d4226a7d5e 72 if (beatNumber < s.length) {
ckabuloglu 3:54d4226a7d5e 73 // Read the next beat (0,1,2,3)
ckabuloglu 3:54d4226a7d5e 74 temp = s.notes[beatNumber++];
ckabuloglu 3:54d4226a7d5e 75 // Check if there's a beat/note (not 0)
ckabuloglu 3:54d4226a7d5e 76 if (temp) {
ckabuloglu 3:54d4226a7d5e 77 // If beat/note exists, create the object for it and push
ckabuloglu 3:54d4226a7d5e 78 // it to the array of current notes on the screen
ckabuloglu 3:54d4226a7d5e 79 Note n1 = Note(temp);
ckabuloglu 3:54d4226a7d5e 80 noteArr.push_back(n1);
ckabuloglu 3:54d4226a7d5e 81 }
ckabuloglu 3:54d4226a7d5e 82 //beatNumber++;
ckabuloglu 3:54d4226a7d5e 83
ckabuloglu 3:54d4226a7d5e 84 for(int i = skipped; i < noteArr.size(); i++) {
ckabuloglu 3:54d4226a7d5e 85 if (noteArr[i].consumed) {
ckabuloglu 3:54d4226a7d5e 86 skipped += 1;
ckabuloglu 3:54d4226a7d5e 87 } else {
ckabuloglu 3:54d4226a7d5e 88 stdio_mutex.lock();
ckabuloglu 3:54d4226a7d5e 89 noteArr[i].drawNote();
ckabuloglu 3:54d4226a7d5e 90 stdio_mutex.unlock();
ckabuloglu 3:54d4226a7d5e 91 }
ckabuloglu 3:54d4226a7d5e 92 }
ckabuloglu 3:54d4226a7d5e 93 } else {
ckabuloglu 3:54d4226a7d5e 94 stdio_mutex.lock();
ckabuloglu 3:54d4226a7d5e 95 screen.rectangle(0,0,640,480,0x000000);
ckabuloglu 3:54d4226a7d5e 96 screen.graphic_string("GAME OVER", 20, 200, FONT_8X8, WHITE, 2, 2);
ckabuloglu 3:54d4226a7d5e 97 stdio_mutex.unlock();
ckabuloglu 3:54d4226a7d5e 98 wait(30);
ckabuloglu 3:54d4226a7d5e 99
ckabuloglu 3:54d4226a7d5e 100 }
ckabuloglu 3:54d4226a7d5e 101 // Thread::wait(0.1);
ckabuloglu 3:54d4226a7d5e 102 }
ckabuloglu 3:54d4226a7d5e 103 }
ckabuloglu 3:54d4226a7d5e 104
ckabuloglu 3:54d4226a7d5e 105 //void checkHits() {
4180_1 0:cfcf73272647 106 //
ckabuloglu 3:54d4226a7d5e 107 //}
4180_1 0:cfcf73272647 108
4180_1 0:cfcf73272647 109 int main() {
ckabuloglu 3:54d4226a7d5e 110 button.mode(PullDown);
ckabuloglu 3:54d4226a7d5e 111
ckabuloglu 3:54d4226a7d5e 112 screen.text_string("DRUM HERO 1.0", 15, 8, FONT_8X8, WHITE);
ckabuloglu 3:54d4226a7d5e 113 screen.text_string("PRESS THE BUTTON", 14, 16, FONT_8X8, WHITE);
ckabuloglu 3:54d4226a7d5e 114 screen.text_string("TO START", 18, 19, FONT_8X8, WHITE);
ykuris3 2:5daa4d35a676 115
ckabuloglu 3:54d4226a7d5e 116 musicOn = 0;
ckabuloglu 3:54d4226a7d5e 117 while(!musicOn) {
ckabuloglu 3:54d4226a7d5e 118 if(button) {
ckabuloglu 3:54d4226a7d5e 119 musicOn = 1;
ckabuloglu 3:54d4226a7d5e 120 }
ckabuloglu 3:54d4226a7d5e 121 }
ckabuloglu 3:54d4226a7d5e 122
ckabuloglu 3:54d4226a7d5e 123 // Initiate the screen and the main graphics
ckabuloglu 3:54d4226a7d5e 124 initiateScreen();
ckabuloglu 3:54d4226a7d5e 125
ckabuloglu 3:54d4226a7d5e 126 t1.start(beatMover);
ckabuloglu 3:54d4226a7d5e 127 // t2.start(checkHits);
ykuris3 2:5daa4d35a676 128
ckabuloglu 3:54d4226a7d5e 129 while(true) {
ckabuloglu 3:54d4226a7d5e 130 // r1 = drum1.read();
ckabuloglu 3:54d4226a7d5e 131 // r2 = drum2.read();
ckabuloglu 3:54d4226a7d5e 132 // r3 = drum3.read();
ckabuloglu 3:54d4226a7d5e 133
ckabuloglu 3:54d4226a7d5e 134 if (r1 > 0.1) {
ckabuloglu 3:54d4226a7d5e 135 // screen.rectangle(192,450,277,470,0xFF0000);
ckabuloglu 3:54d4226a7d5e 136 led1 = 1;
ckabuloglu 3:54d4226a7d5e 137 // if (screen.read_pixel(230, 420) == 0xFF0000) {
ckabuloglu 3:54d4226a7d5e 138 // score++;
ckabuloglu 3:54d4226a7d5e 139 // }
ckabuloglu 3:54d4226a7d5e 140 } else if (r2 > 0.1) {
ckabuloglu 3:54d4226a7d5e 141 // screen.rectangle(277,450,362,470,0x00FF00);
ckabuloglu 3:54d4226a7d5e 142 led2 = 1;
ckabuloglu 3:54d4226a7d5e 143 // if (screen.read_pixel(320, 420) == 0x00FF00) {
ckabuloglu 3:54d4226a7d5e 144 // score++;
ckabuloglu 3:54d4226a7d5e 145 // }
ckabuloglu 3:54d4226a7d5e 146 } else if (r3 > 0.1) {
ckabuloglu 3:54d4226a7d5e 147 // screen.rectangle(362,450,447,470,0x0000FF);
ckabuloglu 3:54d4226a7d5e 148 led3 = 1;
ckabuloglu 3:54d4226a7d5e 149 // if (screen.read_pixel(405, 420) == 0x0000FF) {
ckabuloglu 3:54d4226a7d5e 150 // score++;
ckabuloglu 3:54d4226a7d5e 151 // }
ckabuloglu 3:54d4226a7d5e 152 } else {
ckabuloglu 3:54d4226a7d5e 153 // screen.rectangle(192,450,447,470,0x000000);
ckabuloglu 3:54d4226a7d5e 154 led1 = 0;
ckabuloglu 3:54d4226a7d5e 155 led2 = 0;
ckabuloglu 3:54d4226a7d5e 156 led3 = 0;
ykuris3 2:5daa4d35a676 157 }
ckabuloglu 3:54d4226a7d5e 158 sprintf(buffer,"%d",score);
ckabuloglu 3:54d4226a7d5e 159 stdio_mutex.lock();
ckabuloglu 3:54d4226a7d5e 160 screen.text_string(buffer, 5, 7, FONT_8X8, WHITE);
ckabuloglu 3:54d4226a7d5e 161 stdio_mutex.unlock();
ckabuloglu 3:54d4226a7d5e 162 // Thread::wait(0.01);
ckabuloglu 3:54d4226a7d5e 163 }
ckabuloglu 3:54d4226a7d5e 164
4180_1 0:cfcf73272647 165 }