Lab5

Dependencies:   TSI

Fork of TSI_sample by William Marsh

Revision:
5:6601376ae1b8
Parent:
4:d54e74fbf82c
--- a/main.cpp	Thu Feb 22 16:59:24 2018 +0000
+++ b/main.cpp	Fri Mar 02 18:45:24 2018 +0000
@@ -1,59 +1,105 @@
 #include "mbed.h"
 #include "TSISensor.h"
-
 // Example program for lab 5
 // -------------------------
 //  A value is read from the touch sensor and use
 //    to control two LEDs
 //  The value is also output to the serial interface
-
 Serial pc(USBTX, USBRX); // tx, rx
 DigitalOut redLED(LED_RED);
 DigitalOut greenLED(LED_GREEN);
+DigitalOut blueLED(LED_BLUE);
+DigitalOut led(PTD5);
 TSISensor tsi;
+Thread redThread(osPriorityNormal,1000) ; // thread for red LED
+Thread greenThread(osPriorityNormal,1000) ; // thread for green LED
+Thread blueThread(osPriorityNormal,1000) ; // thread for blue LED
+Thread whiteThread(osPriorityNormal,1000) ; // thread for mix LED
 
-Thread redThread ; // thread for red LED
-Thread greenThread ; // thread for green LED
- 
-void red_thread() {  // method to run in thread
+void red_thread()    // methbd to run in thread
+{
+    while (true) {
+        Thread::signal_wait(0x1);
+        redLED = !redLED; // turn on
+        redThread.signal_clr(0x1) ;
+        // Signal are automatically cleared by wait_signal but
+        // the signal might have been set again while LED on
+    }
+}
+void blue_thread()    // methbd to run in thread
+{
     while (true) {
         Thread::signal_wait(0x1);
-        redLED = false ; // turn on 
-        Thread::wait(5000);
-        redLED = true ; // turn off 
-        redThread.signal_clr(0x1) ;
-          // Signal are automatically cleared by wait_signal but
-          // the signal might have been set again while LED on 
+        blueLED = !blueLED;
+        blueThread.signal_clr(0x1) ;
+        // Signal are automatically cleared by wait_signal but
+        // the signal might have been set again while LED on
+    }
+}
+void green_thread()    // methbd to run in thread
+{
+    while (true) {
+        Thread::signal_wait(0x1);
+        greenLED = !greenLED;
+        greenThread.signal_clr(0x1) ;
+        // Signal are automatically cleared by wait_signal but
+        // the signal might have been set again while LED on
+    }
+}
+void white_thread()    // methbd to run in thread
+{
+    while (true) {
+        Thread::signal_wait(0x1);
+        led=!led;
+        whiteThread.signal_clr(0x1) ;
+        // Signal are automatically cleared by wait_signal but
+        // the signal might have been set again while LED on
     }
 }
 
-void green_thread() {  // method to run in thread
+int main(void)
+{
+    int pos=1;
+    redLED = 1; // turn off
+    greenLED = 1; // turn off
+    blueLED = 1;
+    led=1;
+    redThread.start(&red_thread) ; // start the red thread
+    greenThread.start(&green_thread) ; // start the green thread
+    blueThread.start(&blue_thread) ; // start the blue thread
+    whiteThread.start(&white_thread) ; // start the mixcolor thread
+
     while (true) {
-        Thread::signal_wait(0x1);
-        greenLED = false ; // turn on 
-        Thread::wait(5000);
-        greenLED = true ; // turn off 
-        greenThread.signal_clr(0x1) ;
-          // Signal are automatically cleared by wait_signal but
-          // the signal might have been set again while LED on 
+        uint8_t d = tsi.readDistance() ;  // Distance is between 0 and 39
+        // When no touch --> 0
+        // Left --> low value  Right --> high value
+        pc.printf("%d", d) ;
+        pc.putc(' ') ;
+        if ((d>3) &&(d<9)) {
+            if (pos==1) {
+                redThread.signal_set(0x1) ;
+                pos=0;
+            }
+        } else if ((d>13) &&(d<19)) {
+            if (pos==1) {
+                greenThread.signal_set(0x1) ;
+                pos=0;
+            }
+        } else if ((d>23) &&(d<29)) {
+            if (pos==1) {
+                blueThread.signal_set(0x1) ;
+                pos=0;
+            }
+        } else if (d>33) {
+            if (pos==1) {
+                whiteThread.signal_set(0x1) ;
+                pos=0;
+            }
+        } else if(d == 0) { // touch off
+            pos=1;
+        }
+        Thread::wait(200);  // This polling rate is too slow - increase it
+        // The slower rate maks it easier to output on the terminal
     }
 }
 
-int main(void) {
-    redLED = true ; // turn off 
-    greenLED = true ; // turn off 
-    redThread.start(&red_thread) ; // start the red thread
-    greenThread.start(&green_thread) ; // start the green thread
-    
-    while (true) {
-        uint8_t d = tsi.readDistance() ;  // Distance is between 0 and 39
-                                          // When no touch --> 0
-                                          // Left --> low value  Right --> high value
-        pc.printf("%d", d) ;  
-        pc.putc(' ') ;
-        if (d == 10) redThread.signal_set(0x1) ;
-        if (d == 20) greenThread.signal_set(0x1) ;
-        Thread::wait(200);  // This polling rate is too slow - increase it
-                            // The slower rate maks it easier to output on the terminal
-    }
-}
\ No newline at end of file