Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL SDFileSystem mbed-rtos mbed
Fork of drums by
Revision 3:54d4226a7d5e, committed 2017-04-30
- Comitter:
- ckabuloglu
- Date:
- Sun Apr 30 00:55:41 2017 +0000
- Parent:
- 2:5daa4d35a676
- Child:
- 4:d135d66c55e2
- Commit message:
- mbed1
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Note/note.cpp Sun Apr 30 00:55:41 2017 +0000
@@ -0,0 +1,65 @@
+#include "mbed.h"
+#include "note.h"
+#include "TFT_4DGL.h"
+
+#define RATIO 0.66
+#define minY 130
+#define maxY 430
+
+// extern Serial pc;
+extern TFT_4DGL screen;
+
+// Initate an empty note
+Note::Note() {
+ // Do nothing
+}
+
+// Initiate the note object with a certain type
+Note::Note(int t) {
+ type = t;
+ if (t == 1) {
+ x = 276.0;
+ color = 0xFF0000;
+ } else if (t == 2) {
+ x = 314.0;
+ color = 0x00FF00;
+ } else if (t == 3) {
+ x = 358.0;
+ color = 0x0000FF;
+ }
+ y = 130.0;
+ w = 12.0;
+ h = w * RATIO;
+ speed = 38.0;
+ consumed = 0;
+}
+
+Note::~Note() {
+ // deletes the node
+}
+
+void Note::updatePosition() {
+ y += speed;
+ if (type == 1) {
+ x += -0.14 * speed;
+ } else if (type == 3) {
+ x += 0.14 * speed;
+ }
+ w = 12.0 * (1 + (y - 130.0) / 300.0);
+ h = w * RATIO;
+}
+
+void Note::drawNote() {
+ float oldX = x;
+ float oldY = y;
+ float oldW = w;
+ float oldH = h;
+ updatePosition();
+ screen.ellipse((int)oldX, (int)oldY, (int)oldW, (int)oldH, 0xD38A41);
+ if (y > 420) {
+ consumed = 1;
+// delete this;
+ return;
+ }
+ screen.ellipse((int)x, (int)y, (int)w, (int)h, color);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Note/note.h Sun Apr 30 00:55:41 2017 +0000
@@ -0,0 +1,44 @@
+#ifndef NOTE_H__
+#define NOTE_H__
+
+#define MIN_Y 130
+#define MAX_Y 430
+
+class Note {
+ public:
+
+ // Type of the note (1,2,3) - (left, center, right)
+ int type;
+
+ // Position accros the fret
+ float x,y;
+
+ // Sizes of the displayed note
+ float w,h;
+
+ // Speed of the the note
+ int speed;
+
+ // Color of the note
+ int color;
+
+ // Flag showing if the note is already consumed
+ int consumed;
+
+ // Constructor of the note, no args
+ Note();
+
+ // Constructor of the note, initiate with type
+ Note(int t);
+
+ // Destructor for the note
+ ~Note();
+
+ // Update the position of the note based on its speed
+ void updatePosition();
+
+ // Draw the note with its current stats on the screen
+ void drawNote();
+
+};
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Sun Apr 30 00:55:41 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/SDFileSystem/#8db0d3b02cec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Song/song.cpp Sun Apr 30 00:55:41 2017 +0000
@@ -0,0 +1,18 @@
+#include "mbed.h"
+#include "song.h"
+
+Song::Song(int id) {
+ songId = id;
+
+ static const int arr[192] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0,
+ 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0,
+ 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0,
+ 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0,
+ 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
+
+ vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );
+ length = vec.size();
+ notes = vec;
+ timing = 0.1;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Song/song.h Sun Apr 30 00:55:41 2017 +0000
@@ -0,0 +1,25 @@
+#ifndef SONG_H__
+#define SONG_H__
+
+#include <vector>
+
+class Song {
+ public:
+ // ID of the song to be played
+ int songId;
+
+ // The notes that will be coming, type's of notes(1,2,3) that determine
+ // if a beat needs to be hit or not, 0's mean no hit, (4 means end of the
+ // song)
+ std::vector<int> notes;
+
+ // The length of the array
+ int length;
+
+ // BPM value, or the time value between two notes
+ float timing;
+
+ // Construct a song with a certain ID
+ Song(int id);
+};
+#endif
--- a/main.cpp Wed Apr 26 19:43:51 2017 +0000
+++ b/main.cpp Sun Apr 30 00:55:41 2017 +0000
@@ -1,117 +1,165 @@
-//
-// TFT_4DGL is a class to drive 4D Systems TFT touch screens
-//
-// Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
-//
-// TFT_4DGL is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
+#include "mbed.h"
+#include "rtos.h"
+#include "TFT_4DGL.h"
+#include "note.h"
+#include "song.h"
+#include <vector>
+
+
+// Define all the ports
+// Serial pc(USBTX, USBRX);
+TFT_4DGL screen(p9,p10,p11); // serial tx, serial rx, reset pin;
+AnalogIn r1(p18);
+AnalogIn r2(p19);
+AnalogIn r3(p20);
+DigitalOut musicOn(p22);
+DigitalIn button(p21);
+
+// Define objects
+// Ticker beatCounter;
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+
+Thread t1;
+Mutex stdio_mutex;
+
+// Define and initiate global variables
+std::vector<Note> noteArr;
+int beatNumber = 0;
+char buffer[2];
+int skipped = 0;
+int temp;
+int score = 0;
+Song s = Song(1);
+//float r1;
+//float r2;
+//float r3;
+
+void initiateScreen() {
+ // Initiate the screen and the background
+ screen.baudrate(3000000);
+ screen.display_control(0x0c, 0x01);
+ screen.background_color(0x000000);
+
+ // Draw the frame
+ screen.rectangle(192, 120, 447, 450, 0xD38A41);
+ screen.line(256, 120, 192, 450, 0x96411F);
+ screen.line(296, 120, 277, 450, 0x96411F);
+ screen.line(332, 120, 362, 450, 0x96411F);
+ screen.line(372, 120, 447, 450, 0x96411F);
+ screen.triangle(192, 120, 192, 450, 256, 120, 0x000000);
+ screen.triangle(372, 120, 447, 450, 447, 120, 0x000000);
+ screen.rectangle(447, 120, 450, 450, 0x000000);
+
+ screen.rectangle(256, 100, 296, 120, 0xFF0000);
+ screen.rectangle(296, 100, 332, 120, 0x00FF00);
+ screen.rectangle(332, 100, 372, 120, 0x0000FF);
+
+// screen.rectangle(192,450,277,470,0xFF0000);
+// screen.rectangle(277,450,362,470,0x00FF00);
+// screen.rectangle(362,450,447,470,0x0000FF);
+
+ // Define the points
+ screen.graphic_string("POINTS:", 30, 100, FONT_8X8, WHITE, 2, 2);
+ screen.graphic_string("ROCK YOU", 430, 100, FONT_8X8, WHITE, 2, 2);
+
+}
+
+void beatMover() {
+ while (true) {
+ // Check if the song is ended
+ if (beatNumber < s.length) {
+ // Read the next beat (0,1,2,3)
+ temp = s.notes[beatNumber++];
+ // Check if there's a beat/note (not 0)
+ if (temp) {
+ // If beat/note exists, create the object for it and push
+ // it to the array of current notes on the screen
+ Note n1 = Note(temp);
+ noteArr.push_back(n1);
+ }
+ //beatNumber++;
+
+ for(int i = skipped; i < noteArr.size(); i++) {
+ if (noteArr[i].consumed) {
+ skipped += 1;
+ } else {
+ stdio_mutex.lock();
+ noteArr[i].drawNote();
+ stdio_mutex.unlock();
+ }
+ }
+ } else {
+ stdio_mutex.lock();
+ screen.rectangle(0,0,640,480,0x000000);
+ screen.graphic_string("GAME OVER", 20, 200, FONT_8X8, WHITE, 2, 2);
+ stdio_mutex.unlock();
+ wait(30);
+
+ }
+ // Thread::wait(0.1);
+ }
+}
+
+//void checkHits() {
//
-// TFT_4DGL is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TFT_4DGL. If not, see <http://www.gnu.org/licenses/>.
-
-#include "mbed.h"
-#include "TFT_4DGL.h"
-
-// overwrite 4DGL library screen size settings in TFT_4DGL.h
-#define SIZE_X 479
-#define SIZE_Y 639
-//
-
-TFT_4DGL ecran(p9,p10,p11); // serial tx, serial rx, reset pin;
-Timer t;
+//}
int main() {
-// char s[500];
-// int x = 0, y = 0, status, xc = 0, yc = 0;
-
- ecran.baudrate(128000);
-// added - Set Display to 640 by 480 mode
- ecran.display_control(0x0c, 0x01);
+ button.mode(PullDown);
+
+ screen.text_string("DRUM HERO 1.0", 15, 8, FONT_8X8, WHITE);
+ screen.text_string("PRESS THE BUTTON", 14, 16, FONT_8X8, WHITE);
+ screen.text_string("TO START", 18, 19, FONT_8X8, WHITE);
-// ecran.background_color(DGREY);
-
- ecran.rectangle(192, 120, 447, 450, 0xD38A41);
- ecran.line(256, 120, 192, 450, 0x96411F);
- ecran.line(296, 120, 277, 450, 0x96411F);
- ecran.line(332, 120, 362, 450, 0x96411F);
- ecran.line(372, 120, 447, 450, 0x96411F);
- ecran.triangle(192, 120, 192, 450, 256, 120, 0x000000);
- ecran.triangle(372, 120, 447, 450, 447, 120, 0x000000);
- ecran.rectangle(447, 120, 450, 450, 0x000000);
+ musicOn = 0;
+ while(!musicOn) {
+ if(button) {
+ musicOn = 1;
+ }
+ }
+
+ // Initiate the screen and the main graphics
+ initiateScreen();
+
+ t1.start(beatMover);
+ // t2.start(checkHits);
- ecran.ellipse(314, 132, 12, 8, 0xFF0000);
- ecran.ellipse(276, 132, 12, 8, 0x0000FF);
- ecran.ellipse(352, 132, 12, 8, 0x00FF00);
-
- int i = 0;
- double x = 276;
- double x3 = 352;
- int y = 132;
- int x2 = 314;
- int y2 = 132;
- int y3 = 132;
- int x_len = 12;
- int y_len = 8;
- while(i < 70) {
- i += 1;
- if (i % 8 == 0) {
- x_len += 1;
- y_len += 1;
+ while(true) {
+// r1 = drum1.read();
+// r2 = drum2.read();
+// r3 = drum3.read();
+
+ if (r1 > 0.1) {
+ // screen.rectangle(192,450,277,470,0xFF0000);
+ led1 = 1;
+// if (screen.read_pixel(230, 420) == 0xFF0000) {
+// score++;
+// }
+ } else if (r2 > 0.1) {
+ // screen.rectangle(277,450,362,470,0x00FF00);
+ led2 = 1;
+// if (screen.read_pixel(320, 420) == 0x00FF00) {
+// score++;
+// }
+ } else if (r3 > 0.1) {
+ // screen.rectangle(362,450,447,470,0x0000FF);
+ led3 = 1;
+// if (screen.read_pixel(405, 420) == 0x0000FF) {
+// score++;
+// }
+ } else {
+ // screen.rectangle(192,450,447,470,0x000000);
+ led1 = 0;
+ led2 = 0;
+ led3 = 0;
}
- y2 += 4;
- y3 += 4;
- y += 4;
- x -= 0.5091;
- x3 += 0.5091;
- ecran.ellipse(x2, y2, x_len, y_len, 0xFF0000);
- ecran.ellipse(x, y, x_len, y_len, 0x0000FF);
- ecran.ellipse(x3, y3, x_len, y_len, 0x00FF00);
- wait(0.1);
- ecran.ellipse(x2, y2, x_len, y_len, 0xD38A41);
- ecran.ellipse(x, y, x_len, y_len, 0xD38A41);
- ecran.ellipse(x3, y3, x_len, y_len, 0xD38A41);
- }
-
-//
- //ecran.background_color(DGREY);
-// ecran.circle(120, 160, 80, 0xFF00FF);
-// ecran.triangle(120, 100, 40, 300, 200, 270, 0x0000FF);
-// ecran.line(0, 0, 239, 319, 0xFF0000);
-// ecran.rectangle(50, 50, 200, 90, 0x00FF00);
-// ecran.ellipse(100, 250, 80, 30, 0xFFFF00);
-// ecran.pixel(120, 160, BLACK);
-// ecran.read_pixel(120, 170);
-// ecran.screen_copy(50, 50, 200, 200, 100, 100);
-// ecran.pen_size(WIREFRAME);
-// ecran.circle(120, 160, 60, BLACK);
-// ecran.set_font(FONT_8X8);
-// ecran.text_mode(TRANSPARENT);
-// ecran.text_char('B', 9, 8, BLACK);
-// ecran.text_char('I',10, 8, BLACK);
-// ecran.text_char('G',11, 8, BLACK);
-// ecran.graphic_char('G', 120, 120, BLACK, 4, 4);
-// ecran.text_string("This is a test of string", 2, 12, FONT_8X8, WHITE);
-// ecran.graphic_string("This is a test of graphic string", 20, 200, FONT_8X8, WHITE, 2, 2);
-// ecran.text_button("OK", UP, 40, 260, 0xFF0000, FONT_8X8, BLACK, 2, 2);
-//
-// // delete touch screen demo - no touch on uVGA II
-// ecran.cls();
-// int x = -54;
-// int y = -54;
-// ecran.background_color(BLACK);
-// ecran.circle(x, y, 60, 0xD6A34F);
-// while(1) {
-// ecran.circle(x, y, 60, 0xD6A34F);
-// x = x + 10;
-// y = y + 10;
-// ecran.circle(x, y, 60, 0xD6A34F);
-// }
-//
+ sprintf(buffer,"%d",score);
+ stdio_mutex.lock();
+ screen.text_string(buffer, 5, 7, FONT_8X8, WHITE);
+ stdio_mutex.unlock();
+ // Thread::wait(0.01);
+ }
+
}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Sun Apr 30 00:55:41 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
--- a/mbed.bld Wed Apr 26 19:43:51 2017 +0000 +++ b/mbed.bld Sun Apr 30 00:55:41 2017 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da +https://mbed.org/users/mbed_official/code/mbed/builds/794e51388b66 \ No newline at end of file
