Natalia Govor / Mbed OS lab5

Dependencies:   TSI

Fork of TSI_sample by William Marsh

Committer:
natgovor
Date:
Thu Mar 01 15:13:01 2018 +0000
Revision:
3:e0d192a9fdb0
Parent:
1:e6ffa08ad8bf
Implemented lab5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WilliamMarshQMUL 0:4374caa1ef17 1 #include "mbed.h"
WilliamMarshQMUL 0:4374caa1ef17 2 #include "rtos.h"
WilliamMarshQMUL 0:4374caa1ef17 3 #include "TSISensor.h"
WilliamMarshQMUL 0:4374caa1ef17 4
WilliamMarshQMUL 0:4374caa1ef17 5 // Example program for lab 5
WilliamMarshQMUL 0:4374caa1ef17 6 // -------------------------
WilliamMarshQMUL 0:4374caa1ef17 7 // A value is read from the touch sensor and use
WilliamMarshQMUL 0:4374caa1ef17 8 // to control two LEDs
WilliamMarshQMUL 0:4374caa1ef17 9 // The value is also output to the serial interface
WilliamMarshQMUL 0:4374caa1ef17 10
WilliamMarshQMUL 0:4374caa1ef17 11 Serial pc(USBTX, USBRX); // tx, rx
WilliamMarshQMUL 0:4374caa1ef17 12 TSISensor tsi;
natgovor 3:e0d192a9fdb0 13 DigitalOut leds[4] = { PTA13, PTD5, PTD0, PTD2 };
WilliamMarshQMUL 0:4374caa1ef17 14
natgovor 3:e0d192a9fdb0 15 //Thread threads[4] ;
natgovor 3:e0d192a9fdb0 16 Thread thread1(osPriorityNormal, 1000); // thread for LED1
natgovor 3:e0d192a9fdb0 17 Thread thread2(osPriorityNormal, 1000); // thread for LED2
natgovor 3:e0d192a9fdb0 18 Thread thread3(osPriorityNormal, 1000); // thread for LED3
natgovor 3:e0d192a9fdb0 19 Thread thread4(osPriorityNormal, 1000); // thread for LED4
natgovor 3:e0d192a9fdb0 20
natgovor 3:e0d192a9fdb0 21 void led1_thread() {
WilliamMarshQMUL 0:4374caa1ef17 22 while (true) {
WilliamMarshQMUL 0:4374caa1ef17 23 Thread::signal_wait(0x1);
natgovor 3:e0d192a9fdb0 24 leds[0] = !leds[0];
natgovor 3:e0d192a9fdb0 25 }
natgovor 3:e0d192a9fdb0 26 }
natgovor 3:e0d192a9fdb0 27 void led2_thread() {
natgovor 3:e0d192a9fdb0 28 while (true) {
natgovor 3:e0d192a9fdb0 29 Thread::signal_wait(0x1);
natgovor 3:e0d192a9fdb0 30 leds[1] = !leds[1];
WilliamMarshQMUL 0:4374caa1ef17 31 }
WilliamMarshQMUL 0:4374caa1ef17 32 }
natgovor 3:e0d192a9fdb0 33 void led3_thread() {
WilliamMarshQMUL 0:4374caa1ef17 34 while (true) {
WilliamMarshQMUL 0:4374caa1ef17 35 Thread::signal_wait(0x1);
natgovor 3:e0d192a9fdb0 36 leds[2] = !leds[2];
natgovor 3:e0d192a9fdb0 37 }
natgovor 3:e0d192a9fdb0 38 }
natgovor 3:e0d192a9fdb0 39 void led4_thread() {
natgovor 3:e0d192a9fdb0 40 while (true) {
natgovor 3:e0d192a9fdb0 41 Thread::signal_wait(0x1);
natgovor 3:e0d192a9fdb0 42 leds[3] = !leds[3];
WilliamMarshQMUL 0:4374caa1ef17 43 }
WilliamMarshQMUL 0:4374caa1ef17 44 }
WilliamMarshQMUL 0:4374caa1ef17 45
WilliamMarshQMUL 0:4374caa1ef17 46 int main(void) {
natgovor 3:e0d192a9fdb0 47 enum states { none, leftOut, leftIn, rightIn, rightOut };
natgovor 3:e0d192a9fdb0 48 states state = none;
natgovor 3:e0d192a9fdb0 49
natgovor 3:e0d192a9fdb0 50 for (int i=0; i<4; i++) { // turn off all leds
natgovor 3:e0d192a9fdb0 51 leds[i] = 0;
natgovor 3:e0d192a9fdb0 52 }
natgovor 3:e0d192a9fdb0 53 thread1.start(&led1_thread);
natgovor 3:e0d192a9fdb0 54 thread2.start(&led2_thread);
natgovor 3:e0d192a9fdb0 55 thread3.start(&led3_thread);
natgovor 3:e0d192a9fdb0 56 thread4.start(&led4_thread);
WilliamMarshQMUL 0:4374caa1ef17 57
WilliamMarshQMUL 0:4374caa1ef17 58 while (true) {
natgovor 3:e0d192a9fdb0 59 uint8_t pos = tsi.readDistance() ; // Distance is between 0 and 39
WilliamMarshQMUL 0:4374caa1ef17 60 // When no touch --> 0
WilliamMarshQMUL 0:4374caa1ef17 61 // Left --> low value Right --> high value
natgovor 3:e0d192a9fdb0 62 pc.printf("%d", pos) ;
WilliamMarshQMUL 1:e6ffa08ad8bf 63 pc.putc(' ') ;
natgovor 3:e0d192a9fdb0 64
natgovor 3:e0d192a9fdb0 65 switch (state) {
natgovor 3:e0d192a9fdb0 66 case none:
natgovor 3:e0d192a9fdb0 67 pc.printf("none\n\r");
natgovor 3:e0d192a9fdb0 68 if (pos > 3 && pos < 9) {
natgovor 3:e0d192a9fdb0 69 state = leftOut;
natgovor 3:e0d192a9fdb0 70 } else if (pos > 13 && pos < 19) {
natgovor 3:e0d192a9fdb0 71 state = leftIn;
natgovor 3:e0d192a9fdb0 72 } else if (pos > 23 && pos < 29) {
natgovor 3:e0d192a9fdb0 73 state = rightIn;
natgovor 3:e0d192a9fdb0 74 } else if (pos > 33) {
natgovor 3:e0d192a9fdb0 75 state = rightOut;
natgovor 3:e0d192a9fdb0 76 }
natgovor 3:e0d192a9fdb0 77 break;
natgovor 3:e0d192a9fdb0 78 case leftOut:
natgovor 3:e0d192a9fdb0 79 pc.printf("leftOut\n\r");
natgovor 3:e0d192a9fdb0 80 thread1.signal_set(0x1);
natgovor 3:e0d192a9fdb0 81 if (pos < 3 || pos > 9) {
natgovor 3:e0d192a9fdb0 82 state = none;
natgovor 3:e0d192a9fdb0 83 }
natgovor 3:e0d192a9fdb0 84 break;
natgovor 3:e0d192a9fdb0 85 case leftIn:
natgovor 3:e0d192a9fdb0 86 pc.printf("leftIn\n\r");
natgovor 3:e0d192a9fdb0 87 thread2.signal_set(0x1);
natgovor 3:e0d192a9fdb0 88 if (pos < 13 || pos > 19) {
natgovor 3:e0d192a9fdb0 89 state = none;
natgovor 3:e0d192a9fdb0 90 }
natgovor 3:e0d192a9fdb0 91 break;
natgovor 3:e0d192a9fdb0 92 case rightIn:
natgovor 3:e0d192a9fdb0 93 pc.printf("rightIn\n\r");
natgovor 3:e0d192a9fdb0 94 thread3.signal_set(0x1);
natgovor 3:e0d192a9fdb0 95 if (pos < 23 || pos > 29) {
natgovor 3:e0d192a9fdb0 96 state = none;
natgovor 3:e0d192a9fdb0 97 }
natgovor 3:e0d192a9fdb0 98 break;
natgovor 3:e0d192a9fdb0 99 case rightOut:
natgovor 3:e0d192a9fdb0 100 pc.printf("rightOut\n\r");
natgovor 3:e0d192a9fdb0 101 thread4.signal_set(0x1);
natgovor 3:e0d192a9fdb0 102 if (pos < 33) {
natgovor 3:e0d192a9fdb0 103 state = none;
natgovor 3:e0d192a9fdb0 104 }
natgovor 3:e0d192a9fdb0 105 break;
natgovor 3:e0d192a9fdb0 106 }
natgovor 3:e0d192a9fdb0 107
WilliamMarshQMUL 1:e6ffa08ad8bf 108 Thread::wait(200); // This polling rate is too slow - increase it
WilliamMarshQMUL 1:e6ffa08ad8bf 109 // The slower rate maks it easier to output on the terminal
WilliamMarshQMUL 0:4374caa1ef17 110 }
WilliamMarshQMUL 0:4374caa1ef17 111 }