first version

Dependencies:   TSI

Fork of TSI_sample by William Marsh

main.cpp

Committer:
cvmanuel
Date:
2018-03-01
Revision:
3:adf1bff83db6
Parent:
1:e6ffa08ad8bf
Child:
4:1654ec08fde4

File content as of revision 3:adf1bff83db6:

#include "mbed.h"
#include "rtos.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);

TSISensor tsi;

Thread redThread(osPriorityNormal, 1000); // thread for red LED
Thread greenThread(osPriorityNormal, 1000); // thread for green LED
Thread blueThread(osPriorityNormal, 1000); // thread for green LED
Thread allThread(osPriorityNormal, 1000); // thread for green LED
 
void red_thread() {  // method 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 
    }
}

void green_thread() {  // method to run in 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 
    }
}

void blue_thread() {  // method to run in thread
    while (true) {
        Thread::signal_wait(0x1);
        blueLED = false ; // turn on 
        Thread::wait(5000);
        blueLED = 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 
    }
}

void all_thread() {  // method to run in thread
    while (true) {
        Thread::signal_wait(0x1);
        redLED = false;
        greenLED = false ; // turn on 
        blueLED = false;
        Thread::wait(5000);
        greenLED = true ; // turn off 
        redLED = false;
        blueLED = false;
        greenThread.signal_clr(0x1) ;
          // Signal are automatically cleared by wait_signal but
          // the signal might have been set again while LED on 
    }
}

enum softkeys {outer_left,inner_left,outer_right,inner_right, grey };

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
    
    softkeys key = grey;
    
    while (true) {
        uint8_t d = tsi.readDistance() ;  // Distance is between 0 and 39
            
            
            
            
            
            
                                          // When no touch --> 0
                                          // Left --> low value  Right --> high value
        if(d>3 && d <9)
        {
            key = outer_left;
            
        }
        else 
        if( d>13 && d < 19) 
        {
            key=inner_left;
            
        }else 
        if(d>23 && d < 29)
        {
            key = inner_right;
        }else 
        if(d>33)
        {
            key = outer_right;
        }
        
        switch(key){
            case outer_left :
                if (d<3 || d >9 ) {    // 
                    key= grey;
                }
                break ;
             case inner_left :
                if (d<13 || d >19 ) {    //  
                    key= grey;
                }
                break ;
             case inner_right :
                if (d<23 || d >29 ) {    //  
                    key = grey;
                }
                break ;
             case outer_right :
                if (d<33) {    //  
                    key = grey;
                }
                break ;
        }
        
        
        
        pc.printf("%d", d) ;  
        pc.putc(' ') ;
        pc.printf("\r");
        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
    }
}