Program is a work in progress

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed-rtos mbed wave_player

Fork of 4180_Lab4_v6 by Scott Williams

Committer:
ecardenas8
Date:
Sun Oct 30 04:39:01 2016 +0000
Revision:
1:e84085bbf399
Parent:
0:9f1095365b9a
Program is a work in progress

Who changed what in which revision?

UserRevisionLine numberNew contents of line
swilliams346 0:9f1095365b9a 1 #include "mbed.h"
swilliams346 0:9f1095365b9a 2 #include "rtos.h"
swilliams346 0:9f1095365b9a 3 #include "uLCD_4DGL.h"
swilliams346 0:9f1095365b9a 4 uLCD_4DGL uLCD(p28, p27, p30);
swilliams346 0:9f1095365b9a 5 #include "Robot.h"
swilliams346 0:9f1095365b9a 6 #include "Nav_Switch.h"
swilliams346 0:9f1095365b9a 7 #include "Speaker.h"
swilliams346 0:9f1095365b9a 8 #include "wave_player.h"
swilliams346 0:9f1095365b9a 9 #include "SDFileSystem.h"
ecardenas8 1:e84085bbf399 10
ecardenas8 1:e84085bbf399 11
swilliams346 0:9f1095365b9a 12 BusOut mbedleds(LED1,LED2,LED3,LED4);
swilliams346 0:9f1095365b9a 13 Robot myRobot;
swilliams346 0:9f1095365b9a 14 Nav_Switch myNav( p21, p22, p23, p24, p25);
swilliams346 0:9f1095365b9a 15 Mutex stdio_mutex;
swilliams346 0:9f1095365b9a 16 AnalogOut DACout(p18); // used to play sound on speaker
swilliams346 0:9f1095365b9a 17 wave_player waver(&DACout);
swilliams346 0:9f1095365b9a 18 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card setup
ecardenas8 1:e84085bbf399 19
ecardenas8 1:e84085bbf399 20
swilliams346 0:9f1095365b9a 21 //Wiring Set-up:
swilliams346 0:9f1095365b9a 22 //Speaker: p18
swilliams346 0:9f1095365b9a 23 //SD Card: DO=p6,SCK=p7,DI=p5,CS=p8,VCC=Vout,GND=GND
swilliams346 0:9f1095365b9a 24 //Thumb-Stick: U=p25,C=p24,L=p23,D=p22,R=p21,+=pVout,-=GND
swilliams346 0:9f1095365b9a 25 bool Alive = 1;
swilliams346 0:9f1095365b9a 26 bool Drown = 0;
swilliams346 0:9f1095365b9a 27 bool Car = 0;
swilliams346 0:9f1095365b9a 28 int i = 11;
swilliams346 0:9f1095365b9a 29 int j = 11;
swilliams346 0:9f1095365b9a 30 int C1 = 11;
swilliams346 0:9f1095365b9a 31 int C2 = 32;
swilliams346 0:9f1095365b9a 32 int C3 = 53;
swilliams346 0:9f1095365b9a 33 int C4 = 74;
swilliams346 0:9f1095365b9a 34 int C5 = 95;
swilliams346 0:9f1095365b9a 35 int C6 = 116;
swilliams346 0:9f1095365b9a 36 int Position1 = 90;
swilliams346 0:9f1095365b9a 37 int Position2 = 90;
swilliams346 0:9f1095365b9a 38 int Rate1 = 3;
swilliams346 0:9f1095365b9a 39
swilliams346 0:9f1095365b9a 40 void AutoPilot_thread(void const *argument)
swilliams346 0:9f1095365b9a 41 {
swilliams346 0:9f1095365b9a 42 while(Alive) {
swilliams346 0:9f1095365b9a 43 //Auto-pilot Testing
swilliams346 0:9f1095365b9a 44 Thread::wait(500);
swilliams346 0:9f1095365b9a 45 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 46 myRobot.drawEraser();
swilliams346 0:9f1095365b9a 47 myRobot.moveForward();
swilliams346 0:9f1095365b9a 48 myRobot.drawFrog();
swilliams346 0:9f1095365b9a 49 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 50
swilliams346 0:9f1095365b9a 51 if(myRobot.getYPosition() == 53){ //Check dangers on Traffic 2 Row 3
swilliams346 0:9f1095365b9a 52 }
swilliams346 0:9f1095365b9a 53 if(myRobot.getYPosition() == 74){ //Check dangers on water Row 4
swilliams346 0:9f1095365b9a 54 if(myRobot.getXPosition() == 53 || myRobot.getXPosition() == 74 || myRobot.getXPosition() == 116){
swilliams346 0:9f1095365b9a 55 Alive = 0;
swilliams346 0:9f1095365b9a 56 Drown = 1;
swilliams346 0:9f1095365b9a 57
swilliams346 0:9f1095365b9a 58 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 59 myRobot.drawDrown1();
swilliams346 0:9f1095365b9a 60 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 61 Thread::wait(50);
swilliams346 0:9f1095365b9a 62 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 63 myRobot.drawDrown2();
swilliams346 0:9f1095365b9a 64 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 65 Thread::wait(50);
swilliams346 0:9f1095365b9a 66 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 67 myRobot.drawDrown3();
swilliams346 0:9f1095365b9a 68 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 69 Thread::wait(50);
swilliams346 0:9f1095365b9a 70 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 71 myRobot.drawDrown4();
swilliams346 0:9f1095365b9a 72 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 73 Thread::wait(50);
swilliams346 0:9f1095365b9a 74 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 75 myRobot.drawDrown5();
swilliams346 0:9f1095365b9a 76 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 77 }
swilliams346 0:9f1095365b9a 78 }
swilliams346 0:9f1095365b9a 79 if(myRobot.getYPosition() == 95){ //Check dangers on Traffic 1 Row 5
swilliams346 0:9f1095365b9a 80 }
swilliams346 0:9f1095365b9a 81
swilliams346 0:9f1095365b9a 82 }
swilliams346 0:9f1095365b9a 83 }
swilliams346 0:9f1095365b9a 84
swilliams346 0:9f1095365b9a 85 void Traffic1_thread(void const *argument) //Blue Car
swilliams346 0:9f1095365b9a 86 {
swilliams346 0:9f1095365b9a 87 while(1) {
swilliams346 0:9f1095365b9a 88 Position1 = Position1 + Rate1;
swilliams346 0:9f1095365b9a 89 if(Position1 > 140 ){
swilliams346 0:9f1095365b9a 90 Position1 = -10;
swilliams346 0:9f1095365b9a 91 }
swilliams346 0:9f1095365b9a 92 /*stdio_mutex.lock();
swilliams346 0:9f1095365b9a 93 uLCD.locate(3,3);
swilliams346 0:9f1095365b9a 94 uLCD.printf("%5.0d", Position1);
swilliams346 0:9f1095365b9a 95 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 96 */
swilliams346 0:9f1095365b9a 97
swilliams346 0:9f1095365b9a 98 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 99 uLCD.filled_rectangle(Position1-10,95-4,Position1+10,95+4,BLUE);
swilliams346 0:9f1095365b9a 100 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 101 Thread::wait(30);
swilliams346 0:9f1095365b9a 102 }
swilliams346 0:9f1095365b9a 103 }
swilliams346 0:9f1095365b9a 104
swilliams346 0:9f1095365b9a 105 void Traffic2_thread(void const *argument) //Red Car
swilliams346 0:9f1095365b9a 106 {
swilliams346 0:9f1095365b9a 107 while(1) {
swilliams346 0:9f1095365b9a 108 Position2 = Position2 - Rate1;
swilliams346 0:9f1095365b9a 109 if(Position2 < 0 ){
swilliams346 0:9f1095365b9a 110 Position2 = 140;
swilliams346 0:9f1095365b9a 111 }
swilliams346 0:9f1095365b9a 112 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 113 uLCD.filled_rectangle(Position2-10,52-4,Position2+10,52+4,RED);
swilliams346 0:9f1095365b9a 114 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 115 Thread::wait(35);
swilliams346 0:9f1095365b9a 116 }
swilliams346 0:9f1095365b9a 117 }
swilliams346 0:9f1095365b9a 118
swilliams346 0:9f1095365b9a 119 void SFX_thread(void const *argument)
swilliams346 0:9f1095365b9a 120 {
swilliams346 0:9f1095365b9a 121 while(Alive){
swilliams346 0:9f1095365b9a 122 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 123 uLCD.locate(1,1);
swilliams346 0:9f1095365b9a 124 uLCD.printf("DRY");
swilliams346 0:9f1095365b9a 125 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 126 //Thread::wait(100);
swilliams346 0:9f1095365b9a 127 }
swilliams346 0:9f1095365b9a 128 stdio_mutex.lock();
swilliams346 0:9f1095365b9a 129 uLCD.locate(1,1);
swilliams346 0:9f1095365b9a 130 uLCD.printf("SPLASH!");
swilliams346 0:9f1095365b9a 131 stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 132
swilliams346 0:9f1095365b9a 133 FILE *wave_file;
swilliams346 0:9f1095365b9a 134 wave_file=fopen("/sd/Splash.wav","r");
swilliams346 0:9f1095365b9a 135 waver.play(wave_file);
swilliams346 0:9f1095365b9a 136 fclose(wave_file);
swilliams346 0:9f1095365b9a 137 Thread::wait(100);
swilliams346 0:9f1095365b9a 138 }
swilliams346 0:9f1095365b9a 139
swilliams346 0:9f1095365b9a 140 void Location_thread(void const *argument)
swilliams346 0:9f1095365b9a 141 {
swilliams346 0:9f1095365b9a 142 while(1){
swilliams346 0:9f1095365b9a 143 //stdio_mutex.lock();
swilliams346 0:9f1095365b9a 144 //uLCD.locate(1,1);
swilliams346 0:9f1095365b9a 145 //uLCD.printf("%5.0d", myRobot.getXPosition());
swilliams346 0:9f1095365b9a 146 //uLCD.locate(8,1);
swilliams346 0:9f1095365b9a 147 //uLCD.printf("%5.0d", myRobot.getYPosition());
swilliams346 0:9f1095365b9a 148 //stdio_mutex.unlock();
swilliams346 0:9f1095365b9a 149 Thread::wait(10);
swilliams346 0:9f1095365b9a 150 }
swilliams346 0:9f1095365b9a 151 }
swilliams346 0:9f1095365b9a 152 void ThumbStick_thread(void const *argument)
swilliams346 0:9f1095365b9a 153 {
swilliams346 0:9f1095365b9a 154 while(1) {
swilliams346 0:9f1095365b9a 155 mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs
swilliams346 0:9f1095365b9a 156 if(myNav.fire()) mbedleds = 0x0F;
ecardenas8 1:e84085bbf399 157
ecardenas8 1:e84085bbf399 158 // Player Movement checked with navigation switch
ecardenas8 1:e84085bbf399 159 if (myNav.left() )
ecardenas8 1:e84085bbf399 160 {
ecardenas8 1:e84085bbf399 161 myRobot.moveLeft();
ecardenas8 1:e84085bbf399 162 }
ecardenas8 1:e84085bbf399 163
ecardenas8 1:e84085bbf399 164 if (myNav.right())
ecardenas8 1:e84085bbf399 165 {
ecardenas8 1:e84085bbf399 166 myRobot.moveRight();
ecardenas8 1:e84085bbf399 167 }
ecardenas8 1:e84085bbf399 168
ecardenas8 1:e84085bbf399 169 if (myNav.up())
ecardenas8 1:e84085bbf399 170 {
ecardenas8 1:e84085bbf399 171 myRobot.moveForward();
ecardenas8 1:e84085bbf399 172 }
ecardenas8 1:e84085bbf399 173
ecardenas8 1:e84085bbf399 174 if (myNav.down())
ecardenas8 1:e84085bbf399 175 {
ecardenas8 1:e84085bbf399 176 myRobot.moveBackward();
ecardenas8 1:e84085bbf399 177 }
swilliams346 0:9f1095365b9a 178 Thread::wait(50);
swilliams346 0:9f1095365b9a 179 }
swilliams346 0:9f1095365b9a 180 }
swilliams346 0:9f1095365b9a 181
swilliams346 0:9f1095365b9a 182 int main()
swilliams346 0:9f1095365b9a 183 {
swilliams346 0:9f1095365b9a 184 //Initialize Background
swilliams346 0:9f1095365b9a 185 uLCD.filled_rectangle(0, 0 , 127, 127, RED);
swilliams346 0:9f1095365b9a 186 myRobot.drawOutline();
swilliams346 0:9f1095365b9a 187 while(i <= 116){
swilliams346 0:9f1095365b9a 188 while(j <= 116){
swilliams346 0:9f1095365b9a 189 myRobot.drawHelper(i,j);
swilliams346 0:9f1095365b9a 190 j = j + 21;
swilliams346 0:9f1095365b9a 191 }
swilliams346 0:9f1095365b9a 192 j = 11;
swilliams346 0:9f1095365b9a 193 i = i + 21;
swilliams346 0:9f1095365b9a 194 }
swilliams346 0:9f1095365b9a 195 myRobot.drawFrog();
swilliams346 0:9f1095365b9a 196
ecardenas8 1:e84085bbf399 197 //Thread thread1(AutoPilot_thread);
swilliams346 0:9f1095365b9a 198 Thread thread2(Location_thread);
swilliams346 0:9f1095365b9a 199 Thread thread3(ThumbStick_thread);
swilliams346 0:9f1095365b9a 200 Thread thread4(SFX_thread);
swilliams346 0:9f1095365b9a 201 Thread thread5(Traffic1_thread);
swilliams346 0:9f1095365b9a 202 Thread thread6(Traffic2_thread);
swilliams346 0:9f1095365b9a 203
swilliams346 0:9f1095365b9a 204 while (1) {
swilliams346 0:9f1095365b9a 205
swilliams346 0:9f1095365b9a 206 Thread::wait(500);
swilliams346 0:9f1095365b9a 207 }
swilliams346 0:9f1095365b9a 208 }