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-uLCD-SE PinDetect SDFileSystem mbed-rtos mbed wave_player
Revision 1:abd7e0631db8, committed 2016-10-31
- Comitter:
- swilliams346
- Date:
- Mon Oct 31 19:52:09 2016 +0000
- Parent:
- 0:9f1095365b9a
- Commit message:
- Splash doesn't work
Changed in this revision
| Robot.h | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Robot.h Sat Oct 29 22:15:03 2016 +0000
+++ b/Robot.h Mon Oct 31 19:52:09 2016 +0000
@@ -2,11 +2,17 @@
class Robot
{
Mutex stdio_mutex;
+ int FrogX;
+ int FrogY;
public:
void drawFrog() {
uLCD.filled_rectangle(XPosition-5,YPosition-5,XPosition+5,YPosition+5,RED);
}
+ void drawDeadFrog() {
+ uLCD.filled_rectangle(XPosition-5,YPosition-5,XPosition+5,YPosition+5,WHITE);
+ }
+
void drawOutline() {
uLCD.line(0, 0 , 0, 127, BLACK);
uLCD.line(0, 0 , 127, 0, BLACK);
@@ -27,10 +33,16 @@
uLCD.filled_rectangle(Xp-2,Yp-1,Xp+2,Yp+1,WHITE);
}
- void drawCar1(int Position1) {
- stdio_mutex.lock();
- uLCD.filled_rectangle(Position1-10,95-4,Position1+10,95+4,BLUE);
- stdio_mutex.unlock();
+ void drawCar1(int Position1, int CarWidth) {
+ //stdio_mutex.lock();
+ uLCD.filled_rectangle(Position1-CarWidth,95-4,Position1+CarWidth,95+4,BLUE);
+ //stdio_mutex.unlock();
+ }
+
+ void drawCar2(int Position2, int CarWidth) {
+ //stdio_mutex.lock();
+ uLCD.filled_rectangle(Position2-CarWidth,52-4,Position2+CarWidth,52+4,RED);
+ //stdio_mutex.unlock();
}
void drawWater(int Xp,int Yp) {
@@ -90,16 +102,33 @@
}
void moveForward() {
- setYPosition(getYPosition() - 21);
+ drawHelper(XPosition,YPosition);
+ setYPosition(getYPosition() - 21);
+ drawFrog();
}
void moveBackward() {
- setYPosition(getYPosition() + 21);
+ FrogY = getYPosition();
+ if(FrogY > 11){
+ drawHelper(XPosition,YPosition);
+ setYPosition(FrogY + 21);
+ drawFrog();
+ }
}
void moveLeft() {
- setXPosition(getXPosition() - 21);
+ FrogX = getXPosition();
+ if(FrogX > 11){
+ drawHelper(XPosition,YPosition);
+ setXPosition(FrogX - 21);
+ drawFrog();
+ }
}
void moveRight() {
- setXPosition(getXPosition() + 21);
+ FrogX = getXPosition();
+ if(FrogX < 116){
+ drawHelper(XPosition,YPosition);
+ setXPosition(FrogX + 21);
+ drawFrog();
+ }
}
int getXPosition() {
@@ -118,7 +147,7 @@
Robot()
{
- XPosition = 74;
+ XPosition = 53;
YPosition = 116;
}
private:
--- a/main.cpp Sat Oct 29 22:15:03 2016 +0000
+++ b/main.cpp Mon Oct 31 19:52:09 2016 +0000
@@ -1,5 +1,6 @@
#include "mbed.h"
#include "rtos.h"
+#include "PinDetect.h"
#include "uLCD_4DGL.h"
uLCD_4DGL uLCD(p28, p27, p30);
#include "Robot.h"
@@ -9,18 +10,20 @@
#include "SDFileSystem.h"
BusOut mbedleds(LED1,LED2,LED3,LED4);
Robot myRobot;
-Nav_Switch myNav( p21, p22, p23, p24, p25);
+Nav_Switch myNav( p25, p22, p23, p21, p24);
Mutex stdio_mutex;
AnalogOut DACout(p18); // used to play sound on speaker
wave_player waver(&DACout);
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card setup
+//PinDetect pb1(p25);
//Wiring Set-up:
//Speaker: p18
//SD Card: DO=p6,SCK=p7,DI=p5,CS=p8,VCC=Vout,GND=GND
//Thumb-Stick: U=p25,C=p24,L=p23,D=p22,R=p21,+=pVout,-=GND
bool Alive = 1;
bool Drown = 0;
-bool Car = 0;
+bool Splat = 0;
+double CarWidth = 10;
int i = 11;
int j = 11;
int C1 = 11;
@@ -29,25 +32,36 @@
int C4 = 74;
int C5 = 95;
int C6 = 116;
-int Position1 = 90;
-int Position2 = 90;
+double Position1 = 90;
+double Position2 = 90;
+double Column1;
+double Column2;
int Rate1 = 3;
+int FrogX;
+int FrogY;
-void AutoPilot_thread(void const *argument)
+/*void pb1_hit_callback (void)
+{
+ stdio_mutex.lock();
+ myRobot.moveForward();
+ stdio_mutex.unlock();
+}*/
+
+void DeathCheck_thread(void const *argument)
{
while(Alive) {
- //Auto-pilot Testing
- Thread::wait(500);
- stdio_mutex.lock();
- myRobot.drawEraser();
- myRobot.moveForward();
- myRobot.drawFrog();
- stdio_mutex.unlock();
+ FrogX = myRobot.getXPosition();
+ FrogY = myRobot.getYPosition();
- if(myRobot.getYPosition() == 53){ //Check dangers on Traffic 2 Row 3
- }
- if(myRobot.getYPosition() == 74){ //Check dangers on water Row 4
- if(myRobot.getXPosition() == 53 || myRobot.getXPosition() == 74 || myRobot.getXPosition() == 116){
+ if(FrogY == 32){ //Check win-condition on landing on Row 2
+ Alive = 0;
+ stdio_mutex.lock();
+ uLCD.locate(1,1);
+ uLCD.printf("VICTORY!");
+ stdio_mutex.unlock();
+ }//End 53
+ if(FrogY == 74){ //Check dangers on water Row 4
+ if(FrogX == 32 || FrogX == 74 || FrogX == 116){
Alive = 0;
Drown = 1;
@@ -71,42 +85,80 @@
myRobot.drawDrown5();
stdio_mutex.unlock();
}
- }
- if(myRobot.getYPosition() == 95){ //Check dangers on Traffic 1 Row 5
- }
-
+ }//End 74
+ Thread::wait(10);
+ }//End While
+}//End Thread
+
+void AutoPilot_thread(void const *argument)
+{
+ while(Alive) {
+ //Auto-pilot Testing
+
+ //stdio_mutex.lock();
+ //myRobot.drawEraser();
+ //myRobot.moveForward();
+ //myRobot.drawFrog();
+ //stdio_mutex.unlock();
+ //Thread::wait(50);
+
+ break;
}
}
void Traffic1_thread(void const *argument) //Blue Car
{
- while(1) {
+ while(Alive) {
Position1 = Position1 + Rate1;
if(Position1 > 140 ){
Position1 = -10;
}
+
+ if(FrogY == 95){ //Check dangers on Traffic 1 Row 5
+ if(((Position1 + CarWidth)>(FrogX - 5)) && ((Position1 - CarWidth)<(FrogX + 5))){
+ Alive = 0;
+ stdio_mutex.lock();
+ myRobot.drawDeadFrog();
+ stdio_mutex.unlock();
+ }
+ }
+ Column1 = (ceil((Position1 - CarWidth)/21))*21;
+
/*stdio_mutex.lock();
- uLCD.locate(3,3);
- uLCD.printf("%5.0d", Position1);
+ uLCD.locate(10,1);
+ uLCD.printf("%3.0f", Column1);
stdio_mutex.unlock();
*/
-
stdio_mutex.lock();
- uLCD.filled_rectangle(Position1-10,95-4,Position1+10,95+4,BLUE);
+ myRobot.drawRoad(Column1-10,95);
+ myRobot.drawRoad(Column1-31,95);
+ myRobot.drawCar1(Position1,CarWidth);
stdio_mutex.unlock();
- Thread::wait(30);
+ Thread::wait(10);
}
}
void Traffic2_thread(void const *argument) //Red Car
{
- while(1) {
+ while(Alive) {
Position2 = Position2 - Rate1;
if(Position2 < 0 ){
Position2 = 140;
}
+
+ if(FrogY == 53){ //Check dangers on Traffic 2 Row 3
+ if(((Position2 + CarWidth)>(FrogX - 5)) && ((Position2 - CarWidth)<(FrogX + 5))){
+ Alive = 0;
+ stdio_mutex.lock();
+ myRobot.drawDeadFrog();
+ stdio_mutex.unlock();
+ }
+ }
+ Column2 = (ceil((Position2 - CarWidth)/21))*21;
stdio_mutex.lock();
- uLCD.filled_rectangle(Position2-10,52-4,Position2+10,52+4,RED);
+ myRobot.drawRoad(Column2+10,53);
+ myRobot.drawRoad(Column2+31,53);
+ myRobot.drawCar2(Position2,CarWidth);
stdio_mutex.unlock();
Thread::wait(35);
}
@@ -114,23 +166,38 @@
void SFX_thread(void const *argument)
{
- while(Alive){
- stdio_mutex.lock();
- uLCD.locate(1,1);
- uLCD.printf("DRY");
- stdio_mutex.unlock();
- //Thread::wait(100);
+ while(1){
+ if(Alive == 1){
+ //stdio_mutex.lock();
+ //uLCD.locate(1,1);
+ //uLCD.printf("DRY");
+ //stdio_mutex.unlock();
+ }
+
+ if(Drown == 1){
+ stdio_mutex.lock();
+ uLCD.locate(1,1);
+ uLCD.printf("SPLASH!");
+ stdio_mutex.unlock();
+
+ FILE *wave_file;
+ wave_file=fopen("/sd/Splash.wav","r");
+ waver.play(wave_file);
+ fclose(wave_file);
+ }
+ if(Splat == 1){
+ stdio_mutex.lock();
+ uLCD.locate(1,1);
+ uLCD.printf("SPLAT!");
+ stdio_mutex.unlock();
+
+ //FILE *wave_file;
+ //wave_file=fopen("/sd/Splat.wav","r");
+ //waver.play(wave_file);
+ //fclose(wave_file);
+ }
+ Thread::wait(10);
}
- stdio_mutex.lock();
- uLCD.locate(1,1);
- uLCD.printf("SPLASH!");
- stdio_mutex.unlock();
-
- FILE *wave_file;
- wave_file=fopen("/sd/Splash.wav","r");
- waver.play(wave_file);
- fclose(wave_file);
- Thread::wait(100);
}
void Location_thread(void const *argument)
@@ -145,18 +212,53 @@
Thread::wait(10);
}
}
+
void ThumbStick_thread(void const *argument)
{
while(1) {
- mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs
- if(myNav.fire()) mbedleds = 0x0F;
- Thread::wait(50);
+ // Player Movement checked with navigation switch
+ if (myNav.left() )
+ {
+ stdio_mutex.lock();
+ myRobot.moveLeft();
+ stdio_mutex.unlock();
+ }
+
+ if (myNav.right())
+ {
+ stdio_mutex.lock();
+ myRobot.moveRight();
+ stdio_mutex.unlock();
+ }
+
+ if (myNav.up())
+ {
+ stdio_mutex.lock();
+ myRobot.moveForward();
+ stdio_mutex.unlock();
+ }
+
+ if (myNav.down())
+ {
+ stdio_mutex.lock();
+ myRobot.moveBackward();
+ stdio_mutex.unlock();
+ }
+ Thread::wait(150);
}
}
int main()
{
+ //pb1.mode(PullUp);
+ // Delay for initial pullup to take effect
+ //Thread::wait(1000*.01);
+ // Setup Interrupt callback functions for a pb hit
+ //pb1.attach_deasserted(&pb1_hit_callback);
+ // Start sampling pb inputs using interrupts
+ //pb1.setSampleFrequency();
//Initialize Background
+ uLCD.baudrate(500000);
uLCD.filled_rectangle(0, 0 , 127, 127, RED);
myRobot.drawOutline();
while(i <= 116){
@@ -175,6 +277,7 @@
Thread thread4(SFX_thread);
Thread thread5(Traffic1_thread);
Thread thread6(Traffic2_thread);
+ Thread thread7(DeathCheck_thread);
while (1) {