drum

Dependencies:   4DGL SDFileSystem mbed-rtos mbed

Fork of drums by Can Kabuloglu

Committer:
ykuris3
Date:
Mon May 01 00:31:47 2017 +0000
Revision:
4:d135d66c55e2
Parent:
3:54d4226a7d5e
drum;

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
ykuris3 4:d135d66c55e2 24 //Thread t1;
ykuris3 4:d135d66c55e2 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
ykuris3 4:d135d66c55e2 69 //void beatMover() {
ykuris3 4:d135d66c55e2 70 //
ykuris3 4:d135d66c55e2 71 //}
ykuris3 4:d135d66c55e2 72
ykuris3 4:d135d66c55e2 73 //void checkHits() {
ykuris3 4:d135d66c55e2 74 //
ykuris3 4:d135d66c55e2 75 //}
ykuris3 4:d135d66c55e2 76
ykuris3 4:d135d66c55e2 77 int main() {
ykuris3 4:d135d66c55e2 78 button.mode(PullDown);
ykuris3 4:d135d66c55e2 79 screen.text_string("DRUM HERO 1.0", 15, 8, FONT_8X8, WHITE);
ykuris3 4:d135d66c55e2 80 screen.text_string("PRESS THE BUTTON", 14, 16, FONT_8X8, WHITE);
ykuris3 4:d135d66c55e2 81 screen.text_string("TO START", 18, 19, FONT_8X8, WHITE);
ykuris3 4:d135d66c55e2 82 musicOn = 0;
ykuris3 4:d135d66c55e2 83 while(!musicOn) {
ykuris3 4:d135d66c55e2 84 if(button) {
ykuris3 4:d135d66c55e2 85 musicOn = 1;
ykuris3 4:d135d66c55e2 86 }
ykuris3 4:d135d66c55e2 87 }
ykuris3 4:d135d66c55e2 88 // Initiate the screen and the main graphics
ykuris3 4:d135d66c55e2 89 initiateScreen();
ykuris3 4:d135d66c55e2 90 //t1.start(beatMover);
ykuris3 4:d135d66c55e2 91 // t2.start(checkHits);
ykuris3 4:d135d66c55e2 92 while (true) {
ckabuloglu 3:54d4226a7d5e 93 // Check if the song is ended
ckabuloglu 3:54d4226a7d5e 94 if (beatNumber < s.length) {
ykuris3 4:d135d66c55e2 95 if (r1 > 0.1) {
ykuris3 4:d135d66c55e2 96 screen.rectangle(192,450,277,470,0xFF0000);
ykuris3 4:d135d66c55e2 97 led1 = 1;
ykuris3 4:d135d66c55e2 98 // if (screen.read_pixel(230, 420) == 0xFF0000) {
ykuris3 4:d135d66c55e2 99 // score++;
ykuris3 4:d135d66c55e2 100 // }
ykuris3 4:d135d66c55e2 101 } else if (r2 > 0.1) {
ykuris3 4:d135d66c55e2 102 screen.rectangle(277,450,362,470,0x00FF00);
ykuris3 4:d135d66c55e2 103 led2 = 1;
ykuris3 4:d135d66c55e2 104 // if (screen.read_pixel(320, 420) == 0x00FF00) {
ykuris3 4:d135d66c55e2 105 // score++;
ykuris3 4:d135d66c55e2 106 // }
ykuris3 4:d135d66c55e2 107 } else if (r3 > 0.1) {
ykuris3 4:d135d66c55e2 108 screen.rectangle(362,450,447,470,0x0000FF);
ykuris3 4:d135d66c55e2 109 led3 = 1;
ykuris3 4:d135d66c55e2 110 // if (screen.read_pixel(405, 420) == 0x0000FF) {
ykuris3 4:d135d66c55e2 111 // score++;
ykuris3 4:d135d66c55e2 112 // }
ykuris3 4:d135d66c55e2 113 } else {
ykuris3 4:d135d66c55e2 114 screen.rectangle(192,450,447,470,0x000000);
ykuris3 4:d135d66c55e2 115 led1 = 0;
ykuris3 4:d135d66c55e2 116 led2 = 0;
ykuris3 4:d135d66c55e2 117 led3 = 0;
ykuris3 4:d135d66c55e2 118 }
ckabuloglu 3:54d4226a7d5e 119 // Read the next beat (0,1,2,3)
ckabuloglu 3:54d4226a7d5e 120 temp = s.notes[beatNumber++];
ckabuloglu 3:54d4226a7d5e 121 // Check if there's a beat/note (not 0)
ckabuloglu 3:54d4226a7d5e 122 if (temp) {
ckabuloglu 3:54d4226a7d5e 123 // If beat/note exists, create the object for it and push
ckabuloglu 3:54d4226a7d5e 124 // it to the array of current notes on the screen
ckabuloglu 3:54d4226a7d5e 125 Note n1 = Note(temp);
ckabuloglu 3:54d4226a7d5e 126 noteArr.push_back(n1);
ckabuloglu 3:54d4226a7d5e 127 }
ykuris3 4:d135d66c55e2 128 //beatNumber++;
ykuris3 4:d135d66c55e2 129 for (int i = skipped; i < noteArr.size(); i++) {
ckabuloglu 3:54d4226a7d5e 130 if (noteArr[i].consumed) {
ckabuloglu 3:54d4226a7d5e 131 skipped += 1;
ckabuloglu 3:54d4226a7d5e 132 } else {
ykuris3 4:d135d66c55e2 133 //stdio_mutex.lock();
ckabuloglu 3:54d4226a7d5e 134 noteArr[i].drawNote();
ykuris3 4:d135d66c55e2 135 //stdio_mutex.unlock();
ckabuloglu 3:54d4226a7d5e 136 }
ckabuloglu 3:54d4226a7d5e 137 }
ckabuloglu 3:54d4226a7d5e 138 } else {
ykuris3 4:d135d66c55e2 139 //stdio_mutex.lock();
ckabuloglu 3:54d4226a7d5e 140 screen.rectangle(0,0,640,480,0x000000);
ckabuloglu 3:54d4226a7d5e 141 screen.graphic_string("GAME OVER", 20, 200, FONT_8X8, WHITE, 2, 2);
ykuris3 4:d135d66c55e2 142 //stdio_mutex.unlock();
ykuris3 4:d135d66c55e2 143 wait(30);
ykuris3 2:5daa4d35a676 144 }
ckabuloglu 3:54d4226a7d5e 145 sprintf(buffer,"%d",score);
ykuris3 4:d135d66c55e2 146 //stdio_mutex.lock();
ckabuloglu 3:54d4226a7d5e 147 screen.text_string(buffer, 5, 7, FONT_8X8, WHITE);
ykuris3 4:d135d66c55e2 148 //stdio_mutex.unlock();
ykuris3 4:d135d66c55e2 149 wait(0.4);
ckabuloglu 3:54d4226a7d5e 150 }
4180_1 0:cfcf73272647 151 }