lab4

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed

Committer:
sheldonfernandes2404
Date:
Sun Mar 08 05:23:33 2015 +0000
Revision:
0:fcc91e110a28
Child:
1:070b617f00f3
ECE 4181 Lab 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sheldonfernandes2404 0:fcc91e110a28 1 #include "mbed.h"
sheldonfernandes2404 0:fcc91e110a28 2 #include "uLCD_4DGL.h"
sheldonfernandes2404 0:fcc91e110a28 3 #include "math.h"
sheldonfernandes2404 0:fcc91e110a28 4 #include "rtos.h"
sheldonfernandes2404 0:fcc91e110a28 5
sheldonfernandes2404 0:fcc91e110a28 6 AnalogIn ain(p17);
sheldonfernandes2404 0:fcc91e110a28 7 AnalogIn force(p16);
sheldonfernandes2404 0:fcc91e110a28 8 PwmOut dout(LED1);
sheldonfernandes2404 0:fcc91e110a28 9 uLCD_4DGL lcd(p28, p27, p30);
sheldonfernandes2404 0:fcc91e110a28 10 //const int row=10;
sheldonfernandes2404 0:fcc91e110a28 11 Mutex stdio_mutex;
sheldonfernandes2404 0:fcc91e110a28 12
sheldonfernandes2404 0:fcc91e110a28 13 volatile int count=30;
sheldonfernandes2404 0:fcc91e110a28 14 volatile int a=0;
sheldonfernandes2404 0:fcc91e110a28 15
sheldonfernandes2404 0:fcc91e110a28 16 void steering(void const *args)
sheldonfernandes2404 0:fcc91e110a28 17 {
sheldonfernandes2404 0:fcc91e110a28 18 while(1) {
sheldonfernandes2404 0:fcc91e110a28 19 stdio_mutex.lock();
sheldonfernandes2404 0:fcc91e110a28 20
sheldonfernandes2404 0:fcc91e110a28 21 lcd.cls();
sheldonfernandes2404 0:fcc91e110a28 22 a=floor(ain*39);
sheldonfernandes2404 0:fcc91e110a28 23 if(a>9)
sheldonfernandes2404 0:fcc91e110a28 24 {a=9;}
sheldonfernandes2404 0:fcc91e110a28 25 switch(a) {
sheldonfernandes2404 0:fcc91e110a28 26 case (1): {
sheldonfernandes2404 0:fcc91e110a28 27 lcd.filled_rectangle(0, 98, 9, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 28 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 29 break;
sheldonfernandes2404 0:fcc91e110a28 30 }
sheldonfernandes2404 0:fcc91e110a28 31 case (2): {
sheldonfernandes2404 0:fcc91e110a28 32 lcd.filled_rectangle(14, 98, 23, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 33 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 34 break;
sheldonfernandes2404 0:fcc91e110a28 35 }
sheldonfernandes2404 0:fcc91e110a28 36 case (3): {
sheldonfernandes2404 0:fcc91e110a28 37 lcd.filled_rectangle(28, 98, 37, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 38 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 39 break;
sheldonfernandes2404 0:fcc91e110a28 40 }
sheldonfernandes2404 0:fcc91e110a28 41 case (4): {
sheldonfernandes2404 0:fcc91e110a28 42 lcd.filled_rectangle(42, 98, 51, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 43 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 44 break;
sheldonfernandes2404 0:fcc91e110a28 45 }
sheldonfernandes2404 0:fcc91e110a28 46 case (5): {
sheldonfernandes2404 0:fcc91e110a28 47 lcd.filled_rectangle(56, 98, 65, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 48 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 49 break;
sheldonfernandes2404 0:fcc91e110a28 50 }
sheldonfernandes2404 0:fcc91e110a28 51 case (6): {
sheldonfernandes2404 0:fcc91e110a28 52 lcd.filled_rectangle(70, 98, 79, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 53 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 54 break;
sheldonfernandes2404 0:fcc91e110a28 55 }
sheldonfernandes2404 0:fcc91e110a28 56 case (7): {
sheldonfernandes2404 0:fcc91e110a28 57 lcd.filled_rectangle(84, 98, 93, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 58 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 59 break;
sheldonfernandes2404 0:fcc91e110a28 60 }
sheldonfernandes2404 0:fcc91e110a28 61 case (8): {
sheldonfernandes2404 0:fcc91e110a28 62 lcd.filled_rectangle(98, 98, 107, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 63 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 64 break;
sheldonfernandes2404 0:fcc91e110a28 65 }
sheldonfernandes2404 0:fcc91e110a28 66 case (9): {
sheldonfernandes2404 0:fcc91e110a28 67 lcd.filled_rectangle(112, 98, 121, 110, BLUE);
sheldonfernandes2404 0:fcc91e110a28 68 Thread::wait(200);
sheldonfernandes2404 0:fcc91e110a28 69 break;
sheldonfernandes2404 0:fcc91e110a28 70 }
sheldonfernandes2404 0:fcc91e110a28 71
sheldonfernandes2404 0:fcc91e110a28 72
sheldonfernandes2404 0:fcc91e110a28 73 }
sheldonfernandes2404 0:fcc91e110a28 74 stdio_mutex.unlock();
sheldonfernandes2404 0:fcc91e110a28 75 }
sheldonfernandes2404 0:fcc91e110a28 76 }
sheldonfernandes2404 0:fcc91e110a28 77
sheldonfernandes2404 0:fcc91e110a28 78 void obstacle(void const *args)
sheldonfernandes2404 0:fcc91e110a28 79 {
sheldonfernandes2404 0:fcc91e110a28 80 while(1) {
sheldonfernandes2404 0:fcc91e110a28 81 stdio_mutex.lock();
sheldonfernandes2404 0:fcc91e110a28 82
sheldonfernandes2404 0:fcc91e110a28 83 switch(count) {
sheldonfernandes2404 0:fcc91e110a28 84 case (30): {
sheldonfernandes2404 0:fcc91e110a28 85 lcd.filled_rectangle(0, 0, 90, 10, RED);
sheldonfernandes2404 0:fcc91e110a28 86 break;
sheldonfernandes2404 0:fcc91e110a28 87 }
sheldonfernandes2404 0:fcc91e110a28 88 case (29): {
sheldonfernandes2404 0:fcc91e110a28 89 lcd.filled_rectangle(0, 10, 90, 20, RED);
sheldonfernandes2404 0:fcc91e110a28 90 break;
sheldonfernandes2404 0:fcc91e110a28 91 }
sheldonfernandes2404 0:fcc91e110a28 92 case (28): {
sheldonfernandes2404 0:fcc91e110a28 93 lcd.filled_rectangle(0, 20, 90, 30, RED);
sheldonfernandes2404 0:fcc91e110a28 94 break;
sheldonfernandes2404 0:fcc91e110a28 95 }
sheldonfernandes2404 0:fcc91e110a28 96 case (27): {
sheldonfernandes2404 0:fcc91e110a28 97 lcd.filled_rectangle(0, 30, 90, 40, RED);
sheldonfernandes2404 0:fcc91e110a28 98 break;
sheldonfernandes2404 0:fcc91e110a28 99 }
sheldonfernandes2404 0:fcc91e110a28 100 case (26): {
sheldonfernandes2404 0:fcc91e110a28 101 lcd.filled_rectangle(0, 40, 90, 50, RED);
sheldonfernandes2404 0:fcc91e110a28 102 break;
sheldonfernandes2404 0:fcc91e110a28 103 }
sheldonfernandes2404 0:fcc91e110a28 104 case (25): {
sheldonfernandes2404 0:fcc91e110a28 105 lcd.filled_rectangle(0, 50, 90, 60, RED);
sheldonfernandes2404 0:fcc91e110a28 106 lcd.filled_rectangle(70, 0, 90, 10, GREEN);
sheldonfernandes2404 0:fcc91e110a28 107 break;
sheldonfernandes2404 0:fcc91e110a28 108 }
sheldonfernandes2404 0:fcc91e110a28 109 case (24): {
sheldonfernandes2404 0:fcc91e110a28 110 lcd.filled_rectangle(0, 60, 90, 70, RED);
sheldonfernandes2404 0:fcc91e110a28 111 lcd.filled_rectangle(70, 10, 127, 20, GREEN);
sheldonfernandes2404 0:fcc91e110a28 112 break;
sheldonfernandes2404 0:fcc91e110a28 113 }
sheldonfernandes2404 0:fcc91e110a28 114 case (23): {
sheldonfernandes2404 0:fcc91e110a28 115 lcd.filled_rectangle(0, 70, 90, 80, RED);
sheldonfernandes2404 0:fcc91e110a28 116 lcd.filled_rectangle(70, 20, 127, 30, GREEN);
sheldonfernandes2404 0:fcc91e110a28 117 break;
sheldonfernandes2404 0:fcc91e110a28 118 }
sheldonfernandes2404 0:fcc91e110a28 119 case (22): {
sheldonfernandes2404 0:fcc91e110a28 120 lcd.filled_rectangle(0, 80, 90, 90, RED);
sheldonfernandes2404 0:fcc91e110a28 121 lcd.filled_rectangle(70, 30, 127, 40, GREEN);
sheldonfernandes2404 0:fcc91e110a28 122 break;
sheldonfernandes2404 0:fcc91e110a28 123 }
sheldonfernandes2404 0:fcc91e110a28 124 case (21): {
sheldonfernandes2404 0:fcc91e110a28 125 lcd.filled_rectangle(0, 90, 90, 100, RED);
sheldonfernandes2404 0:fcc91e110a28 126 lcd.filled_rectangle(70, 40, 127, 50, GREEN);
sheldonfernandes2404 0:fcc91e110a28 127 break;
sheldonfernandes2404 0:fcc91e110a28 128 }
sheldonfernandes2404 0:fcc91e110a28 129 case (20): {
sheldonfernandes2404 0:fcc91e110a28 130 lcd.filled_rectangle(0, 100, 90, 110, RED);
sheldonfernandes2404 0:fcc91e110a28 131 lcd.filled_rectangle(70, 50, 127, 60, GREEN);
sheldonfernandes2404 0:fcc91e110a28 132 if(a<8) {
sheldonfernandes2404 0:fcc91e110a28 133 lcd.locate(3,8);
sheldonfernandes2404 0:fcc91e110a28 134 lcd.printf("YOU LOSE!!!");
sheldonfernandes2404 0:fcc91e110a28 135 exit(0);
sheldonfernandes2404 0:fcc91e110a28 136 }
sheldonfernandes2404 0:fcc91e110a28 137 break;
sheldonfernandes2404 0:fcc91e110a28 138 }
sheldonfernandes2404 0:fcc91e110a28 139 case (19): {
sheldonfernandes2404 0:fcc91e110a28 140 lcd.filled_rectangle(0, 110, 100, 120, RED);
sheldonfernandes2404 0:fcc91e110a28 141 lcd.filled_rectangle(70, 60, 127, 70, GREEN);
sheldonfernandes2404 0:fcc91e110a28 142 lcd.filled_rectangle(40,0 , 90,10 , WHITE);
sheldonfernandes2404 0:fcc91e110a28 143 break;
sheldonfernandes2404 0:fcc91e110a28 144 }
sheldonfernandes2404 0:fcc91e110a28 145 case (18): {
sheldonfernandes2404 0:fcc91e110a28 146 lcd.filled_rectangle(0, 120, 100, 130, RED);
sheldonfernandes2404 0:fcc91e110a28 147 lcd.filled_rectangle(70, 70, 127, 80, GREEN);
sheldonfernandes2404 0:fcc91e110a28 148 lcd.filled_rectangle(40,10 , 90,20 , WHITE);
sheldonfernandes2404 0:fcc91e110a28 149 break;
sheldonfernandes2404 0:fcc91e110a28 150 }
sheldonfernandes2404 0:fcc91e110a28 151 case (17): {
sheldonfernandes2404 0:fcc91e110a28 152 // lcd.filled_rectangle(0, 0, 100, 100, RED);
sheldonfernandes2404 0:fcc91e110a28 153 lcd.filled_rectangle(70, 80, 127, 90, GREEN);
sheldonfernandes2404 0:fcc91e110a28 154 lcd.filled_rectangle(40,20 , 90, 30, WHITE);
sheldonfernandes2404 0:fcc91e110a28 155 break;
sheldonfernandes2404 0:fcc91e110a28 156 }
sheldonfernandes2404 0:fcc91e110a28 157 case (16): {
sheldonfernandes2404 0:fcc91e110a28 158 lcd.filled_rectangle(70, 90, 127, 100, GREEN);
sheldonfernandes2404 0:fcc91e110a28 159 lcd.filled_rectangle(40,30 , 90, 40, WHITE);
sheldonfernandes2404 0:fcc91e110a28 160 break;
sheldonfernandes2404 0:fcc91e110a28 161 }
sheldonfernandes2404 0:fcc91e110a28 162 case (15): {
sheldonfernandes2404 0:fcc91e110a28 163 lcd.filled_rectangle(70, 100, 127, 110, GREEN);
sheldonfernandes2404 0:fcc91e110a28 164 lcd.filled_rectangle(40,40 , 90,50 , WHITE);
sheldonfernandes2404 0:fcc91e110a28 165 if(a>6) {
sheldonfernandes2404 0:fcc91e110a28 166 lcd.locate(3,8);
sheldonfernandes2404 0:fcc91e110a28 167 lcd.printf("YOU LOSE!!!");
sheldonfernandes2404 0:fcc91e110a28 168 exit(0);
sheldonfernandes2404 0:fcc91e110a28 169 }
sheldonfernandes2404 0:fcc91e110a28 170
sheldonfernandes2404 0:fcc91e110a28 171 break;
sheldonfernandes2404 0:fcc91e110a28 172 }
sheldonfernandes2404 0:fcc91e110a28 173 case (14): {
sheldonfernandes2404 0:fcc91e110a28 174 lcd.filled_rectangle(70, 110, 127, 120, GREEN);
sheldonfernandes2404 0:fcc91e110a28 175 lcd.filled_rectangle(40,50 , 90, 60, WHITE);
sheldonfernandes2404 0:fcc91e110a28 176
sheldonfernandes2404 0:fcc91e110a28 177 break;
sheldonfernandes2404 0:fcc91e110a28 178 }
sheldonfernandes2404 0:fcc91e110a28 179 case (13): {
sheldonfernandes2404 0:fcc91e110a28 180 lcd.filled_rectangle(70, 120, 127, 130, GREEN);
sheldonfernandes2404 0:fcc91e110a28 181 lcd.filled_rectangle(40,60 , 90, 70, WHITE);
sheldonfernandes2404 0:fcc91e110a28 182 break;
sheldonfernandes2404 0:fcc91e110a28 183 }
sheldonfernandes2404 0:fcc91e110a28 184 case (12): {
sheldonfernandes2404 0:fcc91e110a28 185 lcd.filled_rectangle(40,70 , 90,80 , WHITE);
sheldonfernandes2404 0:fcc91e110a28 186 break;
sheldonfernandes2404 0:fcc91e110a28 187 }
sheldonfernandes2404 0:fcc91e110a28 188 case (11): {
sheldonfernandes2404 0:fcc91e110a28 189 lcd.filled_rectangle(40,80 , 90,90 , WHITE);
sheldonfernandes2404 0:fcc91e110a28 190 break;
sheldonfernandes2404 0:fcc91e110a28 191 }
sheldonfernandes2404 0:fcc91e110a28 192 case (10): {
sheldonfernandes2404 0:fcc91e110a28 193 lcd.filled_rectangle(40,90 , 90,100 , WHITE);
sheldonfernandes2404 0:fcc91e110a28 194 break;
sheldonfernandes2404 0:fcc91e110a28 195 }
sheldonfernandes2404 0:fcc91e110a28 196 case (9): {
sheldonfernandes2404 0:fcc91e110a28 197 lcd.filled_rectangle(40,100 , 90, 110, WHITE);
sheldonfernandes2404 0:fcc91e110a28 198 if(a>5 && a<8 )
sheldonfernandes2404 0:fcc91e110a28 199 {lcd.locate(3,8);
sheldonfernandes2404 0:fcc91e110a28 200 lcd.printf("YOU LOSE!!!");
sheldonfernandes2404 0:fcc91e110a28 201 exit(0);}
sheldonfernandes2404 0:fcc91e110a28 202 break;
sheldonfernandes2404 0:fcc91e110a28 203 }
sheldonfernandes2404 0:fcc91e110a28 204 case (8): {
sheldonfernandes2404 0:fcc91e110a28 205 lcd.filled_rectangle(40,110 , 90, 120, WHITE);
sheldonfernandes2404 0:fcc91e110a28 206 break;
sheldonfernandes2404 0:fcc91e110a28 207 }
sheldonfernandes2404 0:fcc91e110a28 208 case (7): {
sheldonfernandes2404 0:fcc91e110a28 209 lcd.filled_rectangle(40,120 , 90, 130, WHITE);
sheldonfernandes2404 0:fcc91e110a28 210 break;
sheldonfernandes2404 0:fcc91e110a28 211 }
sheldonfernandes2404 0:fcc91e110a28 212 case (6): {
sheldonfernandes2404 0:fcc91e110a28 213
sheldonfernandes2404 0:fcc91e110a28 214 break;
sheldonfernandes2404 0:fcc91e110a28 215 }
sheldonfernandes2404 0:fcc91e110a28 216 case (5): {
sheldonfernandes2404 0:fcc91e110a28 217
sheldonfernandes2404 0:fcc91e110a28 218 break;
sheldonfernandes2404 0:fcc91e110a28 219 }
sheldonfernandes2404 0:fcc91e110a28 220 case (4): {
sheldonfernandes2404 0:fcc91e110a28 221
sheldonfernandes2404 0:fcc91e110a28 222 break;
sheldonfernandes2404 0:fcc91e110a28 223 }
sheldonfernandes2404 0:fcc91e110a28 224 case (3): {
sheldonfernandes2404 0:fcc91e110a28 225
sheldonfernandes2404 0:fcc91e110a28 226 break;
sheldonfernandes2404 0:fcc91e110a28 227 }
sheldonfernandes2404 0:fcc91e110a28 228 case (2): {
sheldonfernandes2404 0:fcc91e110a28 229
sheldonfernandes2404 0:fcc91e110a28 230 break;
sheldonfernandes2404 0:fcc91e110a28 231 }
sheldonfernandes2404 0:fcc91e110a28 232 case (1): {
sheldonfernandes2404 0:fcc91e110a28 233
sheldonfernandes2404 0:fcc91e110a28 234 break;
sheldonfernandes2404 0:fcc91e110a28 235 }
sheldonfernandes2404 0:fcc91e110a28 236
sheldonfernandes2404 0:fcc91e110a28 237 }
sheldonfernandes2404 0:fcc91e110a28 238 stdio_mutex.unlock();
sheldonfernandes2404 0:fcc91e110a28 239 }
sheldonfernandes2404 0:fcc91e110a28 240 }
sheldonfernandes2404 0:fcc91e110a28 241
sheldonfernandes2404 0:fcc91e110a28 242 int main(void)
sheldonfernandes2404 0:fcc91e110a28 243 {
sheldonfernandes2404 0:fcc91e110a28 244
sheldonfernandes2404 0:fcc91e110a28 245 Thread thread1(steering);
sheldonfernandes2404 0:fcc91e110a28 246 Thread thread2(obstacle);
sheldonfernandes2404 0:fcc91e110a28 247
sheldonfernandes2404 0:fcc91e110a28 248 while (1) {
sheldonfernandes2404 0:fcc91e110a28 249 stdio_mutex.lock();
sheldonfernandes2404 0:fcc91e110a28 250 int wait=450*force;
sheldonfernandes2404 0:fcc91e110a28 251 // lcd.locate(4,3);
sheldonfernandes2404 0:fcc91e110a28 252 //lcd.printf("wait- %d ",wait);
sheldonfernandes2404 0:fcc91e110a28 253 lcd.locate(13,0);
sheldonfernandes2404 0:fcc91e110a28 254 lcd.printf("%d",--count);
sheldonfernandes2404 0:fcc91e110a28 255
sheldonfernandes2404 0:fcc91e110a28 256 Thread::wait(600-wait);
sheldonfernandes2404 0:fcc91e110a28 257
sheldonfernandes2404 0:fcc91e110a28 258
sheldonfernandes2404 0:fcc91e110a28 259 if(count==0) {
sheldonfernandes2404 0:fcc91e110a28 260 lcd.locate(1,8);
sheldonfernandes2404 0:fcc91e110a28 261 lcd.printf("Congrats You win!");
sheldonfernandes2404 0:fcc91e110a28 262 exit(0);
sheldonfernandes2404 0:fcc91e110a28 263 }
sheldonfernandes2404 0:fcc91e110a28 264 stdio_mutex.unlock();
sheldonfernandes2404 0:fcc91e110a28 265 }
sheldonfernandes2404 0:fcc91e110a28 266 }