lab4

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

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