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: mbed wave_player mbed-rtos C12832_lcd 4DGL-uLCD-SE LCD_fonts SDFileSystem
Revision 21:cbcbb3480cad, committed 2019-12-08
- Comitter:
- yqin70
- Date:
- Sun Dec 08 02:18:30 2019 +0000
- Parent:
- 20:7d56cdcbc9a5
- Commit message:
- somewhat done(pushbutton added, has an issue where if you spam the touchpad, it'll increase your score even if there is no bubble).
Changed in this revision
--- a/Lane.cpp Fri Dec 06 18:00:11 2019 +0000
+++ b/Lane.cpp Sun Dec 08 02:18:30 2019 +0000
@@ -1,6 +1,5 @@
#include "Lane.hpp"
#include "globals.h"
-
Lane::Lane(int x, int y) {
xpos = x;
ypos = y;
@@ -39,10 +38,12 @@
return pops.empty();
}
-void Lane::checkHit() {
+bool Lane::checkHit() {
if ((pops.begin())->getYpos() <= 110+20 && (pops.begin())->getYpos() >= 110-20) {
// black out the bubble and remove it from the lane's vector
(pops.begin())->clear();
pops.erase(pops.begin());
+ return true;
}
+ return false;
}
\ No newline at end of file
--- a/Lane.hpp Fri Dec 06 18:00:11 2019 +0000
+++ b/Lane.hpp Sun Dec 08 02:18:30 2019 +0000
@@ -15,7 +15,7 @@
void draw();
void moveDown();
bool isEmpty();
- void checkHit();
+ bool checkHit();
private:
std::vector<Bubble> pops;
--- a/globals.h Fri Dec 06 18:00:11 2019 +0000 +++ b/globals.h Sun Dec 08 02:18:30 2019 +0000 @@ -12,7 +12,8 @@ extern uLCD_4DGL uLCD; extern Mutex lcd_mutex; -extern volatile int bubblesDrawn; -extern volatile int bubblesMissed; +extern volatile float bubblesDrawn; +extern volatile float bubblesMissed; +extern volatile float bubblesHit; #endif //globals_h \ No newline at end of file
--- a/main.cpp Fri Dec 06 18:00:11 2019 +0000
+++ b/main.cpp Sun Dec 08 02:18:30 2019 +0000
@@ -36,6 +36,7 @@
volatile bool homescreen = true;
volatile bool songchange = false;
volatile bool playing = false;
+Serial pc(USBTX, USBRX);
uLCD_4DGL uLCD(p28,p27,p30);
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
AnalogIn joy_pot(p16);
@@ -77,9 +78,12 @@
unsigned short **currentBubbles = NULL;
int bubbleNdx = 0;
-volatile int bubblesDrawn = 0;
-volatile int bubblesMissed = 0;
-
+volatile float bubblesDrawn = 0;
+volatile float bubblesMissed = 0;
+volatile float bubblesHit = 0;
+int key_code;
+int prev_key_code = 0;
+volatile bool touchpadPressed = false;
// Thread 1
@@ -180,12 +184,12 @@
//lcd_mutex.lock();
// uLCD.printf("%d", bubblesMissed);
// lcd_mutex.unlock();
- if (bubblesMissed <= 1) {
- myRGBled = green;
- } else if (bubblesMissed <= 3) {
+ if (bubblesHit <= 1) {
+ myRGBled = red;
+ } else if (bubblesHit <= 3) {
myRGBled = blue;
} else {
- myRGBled = red;
+ myRGBled = green;
}
Thread::wait(300);
@@ -237,6 +241,9 @@
void showScore () {
+
+ lcd_mutex.lock();
+ uLCD.cls();
uLCD.color(0x00FF00); // Change text color and set up menu
uLCD.text_bold(ON);
uLCD.locate(1,1);
@@ -245,7 +252,7 @@
uLCD.printf("Thanks for playing Tap Tap Revolution!");
// winSound();
wait(1.5);
-
+ uLCD.cls();
uLCD.text_width(1); //4X size text
uLCD.text_height(1);
uLCD.text_bold(OFF);
@@ -255,36 +262,54 @@
uLCD.color(0x00FF00);
uLCD.locate(2,10);
- float scorePercent = ((bubblesDrawn - bubblesMissed) / bubblesDrawn) * 100;
- uLCD.printf("%d %", scorePercent);
- wait(1.2);
+ float scorePercent = ((bubblesHit) / bubblesDrawn) * 100.0;
+ uLCD.printf("Bubbles Hit %4.2f \n", bubblesHit);
+ uLCD.printf("Bubbles Drawn %4.2f \n", bubblesDrawn);
+ uLCD.printf("Your Score: %4.2f % \n", scorePercent);
+ bubblesHit = 0;
+ bubblesDrawn = 0;
+ //uLCD.printf("%d %", scorePercent);
+ wait(10);
uLCD.cls();
uLCD.locate(5,0);
-
+ lcd_mutex.unlock();
Thread::wait(2000);
}
-
+//touchpad interrupt code
+void fallInterrupt()
+{
+ prev_key_code = key_code;
+ key_code=0;
+ int i=0;
+ int value=mpr121.read(0x00);
+ value +=mpr121.read(0x01)<<8;
+ i=0;
+ //acquires value
+ for (i=0; i<12; i++) {
+ if (((value>>i)&0x01)==1) key_code=i+1;
+ }
+ touchpadPressed = true;
+}
int main() {
//<<<<<<< working copy
//
-// uLCD.baudrate(3000000); // set baud rate to max
+ uLCD.baudrate(3000000); // set baud rate to max
//
//=======
// interrupt.fall(&fallInterrupt);
// interrupt.mode(PullUp); //for touch keypad
// lcd_mutex.lock();
// uLCD.baudrate(3000000);
-// uLCD.cls();
-// uLCD.media_init();
-// uLCD.set_sector_address(0x0077, 0x4002);
-// uLCD.display_video(0,0);
+ uLCD.cls();
+ uLCD.media_init();
+ uLCD.set_sector_address(0x0077, 0x4002);
+ uLCD.display_video(0,0);
// wait(4);
// lcd_mutex.unlock();
//>>>>>>> merge rev
-
// seed random
srand (time(NULL));
-
+
thread1.start(homescreen_thread);
thread2.start(joystick_thread);
thread3.start(pbcontrol_thread);
@@ -296,7 +321,8 @@
bubbleLanes[0] = new Lane(20,15);
bubbleLanes[1] = new Lane(60,15);
bubbleLanes[2] = new Lane(100,15);
-
+ interrupt.fall(&fallInterrupt);
+ interrupt.mode(PullUp);
//startup sound?
while(true) {
@@ -359,14 +385,25 @@
bubbleLanes[0]->draw();
bubbleLanes[1]->draw();
bubbleLanes[2]->draw();
+ uLCD.locate(0,0);
+ uLCD.printf("%4.2f", bubblesHit);
lcd_mutex.unlock();
+
// TODO: check for hits with capacitive touchpad
// if there is a hit, delete the bubble from the dynamic array
// replace "true" in the next 3 lines with your logic of when to check for a hit
-// if (true) bubbleLanes[0]->checkHit();
-// if (true) bubbleLanes[1]->checkHit();
-// if (true) bubbleLanes[2]->checkHit();
+ //if touchpad has been pressed, checks if bubble in right spot
+ if(touchpadPressed){
+ //lcd_mutex.lock();
+ //uLCD.printf("%d", key_code);
+ //lcd_mutex.unlock();
+ //pc.printf("Pressed/n");
+ if (key_code == 12) bubblesHit += bubbleLanes[0]->checkHit();
+ if (key_code == 8) bubblesHit += bubbleLanes[1]->checkHit();
+ if (key_code == 4) bubblesHit += bubbleLanes[2]->checkHit();
+ }
+ touchpadPressed = false;
// move down all the bubbles, deleting bubbles that are out of bounds if required
bubbleLanes[0]->moveDown();
@@ -382,7 +419,7 @@
}
// uncomment this when gameplay works
- //showScore();
+ showScore();
// return to homescreen when
songselect = false;
