hey
Dependencies: 4DGL-uLCD-SE PinDetect SDFileSystem mbed-rtos mbed wave_player
Fork of 4180_Lab4_v6 by
main.cpp@0:9f1095365b9a, 2016-10-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |