lab4
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:fcc91e110a28
- Child:
- 1:070b617f00f3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Mar 08 05:23:33 2015 +0000 @@ -0,0 +1,266 @@ +#include "mbed.h" +#include "uLCD_4DGL.h" +#include "math.h" +#include "rtos.h" + +AnalogIn ain(p17); +AnalogIn force(p16); +PwmOut dout(LED1); +uLCD_4DGL lcd(p28, p27, p30); +//const int row=10; +Mutex stdio_mutex; + +volatile int count=30; +volatile int a=0; + +void steering(void const *args) +{ + while(1) { + stdio_mutex.lock(); + + lcd.cls(); + a=floor(ain*39); + if(a>9) + {a=9;} + switch(a) { + case (1): { + lcd.filled_rectangle(0, 98, 9, 110, BLUE); + Thread::wait(200); + break; + } + case (2): { + lcd.filled_rectangle(14, 98, 23, 110, BLUE); + Thread::wait(200); + break; + } + case (3): { + lcd.filled_rectangle(28, 98, 37, 110, BLUE); + Thread::wait(200); + break; + } + case (4): { + lcd.filled_rectangle(42, 98, 51, 110, BLUE); + Thread::wait(200); + break; + } + case (5): { + lcd.filled_rectangle(56, 98, 65, 110, BLUE); + Thread::wait(200); + break; + } + case (6): { + lcd.filled_rectangle(70, 98, 79, 110, BLUE); + Thread::wait(200); + break; + } + case (7): { + lcd.filled_rectangle(84, 98, 93, 110, BLUE); + Thread::wait(200); + break; + } + case (8): { + lcd.filled_rectangle(98, 98, 107, 110, BLUE); + Thread::wait(200); + break; + } + case (9): { + lcd.filled_rectangle(112, 98, 121, 110, BLUE); + Thread::wait(200); + break; + } + + + } + stdio_mutex.unlock(); + } +} + +void obstacle(void const *args) +{ + while(1) { + stdio_mutex.lock(); + + switch(count) { + case (30): { + lcd.filled_rectangle(0, 0, 90, 10, RED); + break; + } + case (29): { + lcd.filled_rectangle(0, 10, 90, 20, RED); + break; + } + case (28): { + lcd.filled_rectangle(0, 20, 90, 30, RED); + break; + } + case (27): { + lcd.filled_rectangle(0, 30, 90, 40, RED); + break; + } + case (26): { + lcd.filled_rectangle(0, 40, 90, 50, RED); + break; + } + case (25): { + lcd.filled_rectangle(0, 50, 90, 60, RED); + lcd.filled_rectangle(70, 0, 90, 10, GREEN); + break; + } + case (24): { + lcd.filled_rectangle(0, 60, 90, 70, RED); + lcd.filled_rectangle(70, 10, 127, 20, GREEN); + break; + } + case (23): { + lcd.filled_rectangle(0, 70, 90, 80, RED); + lcd.filled_rectangle(70, 20, 127, 30, GREEN); + break; + } + case (22): { + lcd.filled_rectangle(0, 80, 90, 90, RED); + lcd.filled_rectangle(70, 30, 127, 40, GREEN); + break; + } + case (21): { + lcd.filled_rectangle(0, 90, 90, 100, RED); + lcd.filled_rectangle(70, 40, 127, 50, GREEN); + break; + } + case (20): { + lcd.filled_rectangle(0, 100, 90, 110, RED); + lcd.filled_rectangle(70, 50, 127, 60, GREEN); + if(a<8) { + lcd.locate(3,8); + lcd.printf("YOU LOSE!!!"); + exit(0); + } + break; + } + case (19): { + lcd.filled_rectangle(0, 110, 100, 120, RED); + lcd.filled_rectangle(70, 60, 127, 70, GREEN); + lcd.filled_rectangle(40,0 , 90,10 , WHITE); + break; + } + case (18): { + lcd.filled_rectangle(0, 120, 100, 130, RED); + lcd.filled_rectangle(70, 70, 127, 80, GREEN); + lcd.filled_rectangle(40,10 , 90,20 , WHITE); + break; + } + case (17): { + // lcd.filled_rectangle(0, 0, 100, 100, RED); + lcd.filled_rectangle(70, 80, 127, 90, GREEN); + lcd.filled_rectangle(40,20 , 90, 30, WHITE); + break; + } + case (16): { + lcd.filled_rectangle(70, 90, 127, 100, GREEN); + lcd.filled_rectangle(40,30 , 90, 40, WHITE); + break; + } + case (15): { + lcd.filled_rectangle(70, 100, 127, 110, GREEN); + lcd.filled_rectangle(40,40 , 90,50 , WHITE); + if(a>6) { + lcd.locate(3,8); + lcd.printf("YOU LOSE!!!"); + exit(0); + } + + break; + } + case (14): { + lcd.filled_rectangle(70, 110, 127, 120, GREEN); + lcd.filled_rectangle(40,50 , 90, 60, WHITE); + + break; + } + case (13): { + lcd.filled_rectangle(70, 120, 127, 130, GREEN); + lcd.filled_rectangle(40,60 , 90, 70, WHITE); + break; + } + case (12): { + lcd.filled_rectangle(40,70 , 90,80 , WHITE); + break; + } + case (11): { + lcd.filled_rectangle(40,80 , 90,90 , WHITE); + break; + } + case (10): { + lcd.filled_rectangle(40,90 , 90,100 , WHITE); + break; + } + case (9): { + lcd.filled_rectangle(40,100 , 90, 110, WHITE); + if(a>5 && a<8 ) + {lcd.locate(3,8); + lcd.printf("YOU LOSE!!!"); + exit(0);} + break; + } + case (8): { + lcd.filled_rectangle(40,110 , 90, 120, WHITE); + break; + } + case (7): { + lcd.filled_rectangle(40,120 , 90, 130, WHITE); + break; + } + case (6): { + + break; + } + case (5): { + + break; + } + case (4): { + + break; + } + case (3): { + + break; + } + case (2): { + + break; + } + case (1): { + + break; + } + + } + stdio_mutex.unlock(); + } +} + +int main(void) +{ + + Thread thread1(steering); + Thread thread2(obstacle); + + while (1) { + stdio_mutex.lock(); + int wait=450*force; + // lcd.locate(4,3); + //lcd.printf("wait- %d ",wait); + lcd.locate(13,0); + lcd.printf("%d",--count); + + Thread::wait(600-wait); + + + if(count==0) { + lcd.locate(1,8); + lcd.printf("Congrats You win!"); + exit(0); + } + stdio_mutex.unlock(); + } +} \ No newline at end of file