hey

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

Fork of 4180_Lab4_v6 by Scott Williams

Committer:
swilliams346
Date:
Sat Oct 29 22:15:03 2016 +0000
Revision:
0:9f1095365b9a
Child:
1:abd7e0631db8
10/29/2016

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