drum
Dependencies: 4DGL SDFileSystem mbed-rtos mbed
Fork of drums by
Diff: main.cpp
- Revision:
- 3:54d4226a7d5e
- Parent:
- 2:5daa4d35a676
- Child:
- 4:d135d66c55e2
--- 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