Tobore Denedo / Mbed OS TSI_Lab5

Dependencies:   TSI

Fork of TSI_sample by William Marsh

Committer:
Tobden
Date:
Fri Mar 02 23:39:52 2018 +0000
Revision:
5:fb3b23290880
Parent:
4:d54e74fbf82c
Child:
6:968bd77025bb
TSI program Lab 5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WilliamMarshQMUL 0:4374caa1ef17 1 #include "mbed.h"
WilliamMarshQMUL 0:4374caa1ef17 2 #include "TSISensor.h"
WilliamMarshQMUL 0:4374caa1ef17 3
WilliamMarshQMUL 0:4374caa1ef17 4 // Example program for lab 5
WilliamMarshQMUL 0:4374caa1ef17 5 // -------------------------
WilliamMarshQMUL 0:4374caa1ef17 6 // A value is read from the touch sensor and use
WilliamMarshQMUL 0:4374caa1ef17 7 // to control two LEDs
WilliamMarshQMUL 0:4374caa1ef17 8 // The value is also output to the serial interface
WilliamMarshQMUL 0:4374caa1ef17 9
WilliamMarshQMUL 0:4374caa1ef17 10 Serial pc(USBTX, USBRX); // tx, rx
WilliamMarshQMUL 0:4374caa1ef17 11 DigitalOut redLED(LED_RED);
WilliamMarshQMUL 0:4374caa1ef17 12 DigitalOut greenLED(LED_GREEN);
Tobden 5:fb3b23290880 13 DigitalOut blueLED(LED_BLUE);
Tobden 5:fb3b23290880 14 DigitalOut led1(D8);
Tobden 5:fb3b23290880 15 enum positions{LeftOut, RightOut, LeftIn, RightIn, None};
WilliamMarshQMUL 0:4374caa1ef17 16 TSISensor tsi;
WilliamMarshQMUL 0:4374caa1ef17 17
Tobden 5:fb3b23290880 18 Thread redThread;//(osPriorityNormal, 1000); // thread for red LED
Tobden 5:fb3b23290880 19 Thread greenThread;//(osPriorityNormal, 1000); // thread for green LED
Tobden 5:fb3b23290880 20 Thread blueThread;//(osPriorityNormal, 1000);
Tobden 5:fb3b23290880 21 Thread whiteThread;//(osPriorityNormal, 1000);
Tobden 5:fb3b23290880 22 volatile int numb = 1;
Tobden 5:fb3b23290880 23
WilliamMarshQMUL 0:4374caa1ef17 24 void red_thread() { // method to run in thread
Tobden 5:fb3b23290880 25 while (true) {
WilliamMarshQMUL 0:4374caa1ef17 26 Thread::signal_wait(0x1);
Tobden 5:fb3b23290880 27 redLED = !redLED ; // turn on
Tobden 5:fb3b23290880 28 //blueLED = true;
Tobden 5:fb3b23290880 29 //greenLED = true;
Tobden 5:fb3b23290880 30 // Thread::wait(5000);
Tobden 5:fb3b23290880 31 // redLED = true ; // turn off
Tobden 5:fb3b23290880 32 redThread.signal_clr(0x1) ;
WilliamMarshQMUL 0:4374caa1ef17 33 // Signal are automatically cleared by wait_signal but
Tobden 5:fb3b23290880 34 // the signal might have been set again while LED on
WilliamMarshQMUL 0:4374caa1ef17 35 }
WilliamMarshQMUL 0:4374caa1ef17 36 }
WilliamMarshQMUL 0:4374caa1ef17 37
WilliamMarshQMUL 0:4374caa1ef17 38 void green_thread() { // method to run in thread
Tobden 5:fb3b23290880 39 while (true) {
WilliamMarshQMUL 0:4374caa1ef17 40 Thread::signal_wait(0x1);
Tobden 5:fb3b23290880 41 greenLED = !greenLED ; // turn on
Tobden 5:fb3b23290880 42 // blueLED = true;
Tobden 5:fb3b23290880 43 //redLED = true;
Tobden 5:fb3b23290880 44 // Thread::wait(5000);
Tobden 5:fb3b23290880 45 // greenLED = true ; // turn off
WilliamMarshQMUL 0:4374caa1ef17 46 greenThread.signal_clr(0x1) ;
WilliamMarshQMUL 0:4374caa1ef17 47 // Signal are automatically cleared by wait_signal but
Tobden 5:fb3b23290880 48 // the signal might have been set again while LED on
Tobden 5:fb3b23290880 49 }
Tobden 5:fb3b23290880 50 }
Tobden 5:fb3b23290880 51
Tobden 5:fb3b23290880 52 void blue_thread() { // method to run in thread
Tobden 5:fb3b23290880 53 while (true) {
Tobden 5:fb3b23290880 54 Thread::signal_wait(0x1);
Tobden 5:fb3b23290880 55 blueLED = !blueLED ; // turn on
Tobden 5:fb3b23290880 56 //redLED = true;
Tobden 5:fb3b23290880 57 //greenLED = true;
Tobden 5:fb3b23290880 58 //Thread::wait(5000);
Tobden 5:fb3b23290880 59 //blueLED = true ; // turn off
Tobden 5:fb3b23290880 60 blueThread.signal_clr(0x1) ;
Tobden 5:fb3b23290880 61 // Signal are automatically cleared by wait_signal but
Tobden 5:fb3b23290880 62 // the signal might have been set again while LED on
Tobden 5:fb3b23290880 63 }
Tobden 5:fb3b23290880 64 }
Tobden 5:fb3b23290880 65
Tobden 5:fb3b23290880 66
Tobden 5:fb3b23290880 67 void white_thread() { // method to run in thread
Tobden 5:fb3b23290880 68 while (true) {
Tobden 5:fb3b23290880 69 Thread::signal_wait(0x1);
Tobden 5:fb3b23290880 70 led1 = !led1;
Tobden 5:fb3b23290880 71 // Thread::wait(5000);
Tobden 5:fb3b23290880 72 //redLED = true ; // turn off
Tobden 5:fb3b23290880 73 //blueLED = true ; // turn off
Tobden 5:fb3b23290880 74 //greenLED = true ; // turn off
Tobden 5:fb3b23290880 75 whiteThread.signal_clr(0x1) ;
Tobden 5:fb3b23290880 76 // Signal are automatically cleared by wait_signal but
Tobden 5:fb3b23290880 77 // the signal might have been set again while LED on
WilliamMarshQMUL 0:4374caa1ef17 78 }
WilliamMarshQMUL 0:4374caa1ef17 79 }
WilliamMarshQMUL 0:4374caa1ef17 80
Tobden 5:fb3b23290880 81
WilliamMarshQMUL 0:4374caa1ef17 82 int main(void) {
Tobden 5:fb3b23290880 83 redLED = true ; // turn off
Tobden 5:fb3b23290880 84 greenLED = true ; // turn off
Tobden 5:fb3b23290880 85 blueLED = true;
WilliamMarshQMUL 0:4374caa1ef17 86 redThread.start(&red_thread) ; // start the red thread
WilliamMarshQMUL 0:4374caa1ef17 87 greenThread.start(&green_thread) ; // start the green thread
Tobden 5:fb3b23290880 88 blueThread.start(&blue_thread) ; // start the green thread
Tobden 5:fb3b23290880 89 whiteThread.start(&white_thread) ; // start the green thread
Tobden 5:fb3b23290880 90 positions area = None;
Tobden 5:fb3b23290880 91
WilliamMarshQMUL 0:4374caa1ef17 92 while (true) {
Tobden 5:fb3b23290880 93
WilliamMarshQMUL 0:4374caa1ef17 94 uint8_t d = tsi.readDistance() ; // Distance is between 0 and 39
WilliamMarshQMUL 0:4374caa1ef17 95 // When no touch --> 0
WilliamMarshQMUL 0:4374caa1ef17 96 // Left --> low value Right --> high value
Tobden 5:fb3b23290880 97 pc.printf("%d", d) ;
WilliamMarshQMUL 1:e6ffa08ad8bf 98 pc.putc(' ') ;
Tobden 5:fb3b23290880 99 switch (area)
Tobden 5:fb3b23290880 100 {
Tobden 5:fb3b23290880 101 case LeftOut:
Tobden 5:fb3b23290880 102
Tobden 5:fb3b23290880 103 if (numb == 0)
Tobden 5:fb3b23290880 104
Tobden 5:fb3b23290880 105 redLED = redLED;
Tobden 5:fb3b23290880 106 if (d<3 || d>9)
Tobden 5:fb3b23290880 107 {numb = 1;
Tobden 5:fb3b23290880 108 area = None;
Tobden 5:fb3b23290880 109 break;
Tobden 5:fb3b23290880 110 }
Tobden 5:fb3b23290880 111 case LeftIn:
Tobden 5:fb3b23290880 112 if (numb == 0)
Tobden 5:fb3b23290880 113 greenLED = greenLED;
Tobden 5:fb3b23290880 114 if (d<13 || d > 19){
Tobden 5:fb3b23290880 115 numb = 1;
Tobden 5:fb3b23290880 116 area = None;
Tobden 5:fb3b23290880 117 break;
Tobden 5:fb3b23290880 118 }
Tobden 5:fb3b23290880 119 case RightIn:
Tobden 5:fb3b23290880 120 if (numb == 0)
Tobden 5:fb3b23290880 121 blueLED = blueLED;
Tobden 5:fb3b23290880 122 if (d< 23 || d > 29){
Tobden 5:fb3b23290880 123 numb = 1;
Tobden 5:fb3b23290880 124 area = None;
Tobden 5:fb3b23290880 125 break;
Tobden 5:fb3b23290880 126 }
Tobden 5:fb3b23290880 127 case RightOut:
Tobden 5:fb3b23290880 128 if (numb == 0)
Tobden 5:fb3b23290880 129 led1 = led1;
Tobden 5:fb3b23290880 130 if (d<33)
Tobden 5:fb3b23290880 131 {numb = 1;
Tobden 5:fb3b23290880 132 area = None;
Tobden 5:fb3b23290880 133 break;
Tobden 5:fb3b23290880 134 }
Tobden 5:fb3b23290880 135 case None:
Tobden 5:fb3b23290880 136 if (d>3 && d < 9){
Tobden 5:fb3b23290880 137 if (numb == 1){
Tobden 5:fb3b23290880 138 redThread.signal_set(0x1);
Tobden 5:fb3b23290880 139 numb = 0;
Tobden 5:fb3b23290880 140 area = LeftOut ;
Tobden 5:fb3b23290880 141 break;}
Tobden 5:fb3b23290880 142 }
Tobden 5:fb3b23290880 143 else if (d > 13 && d < 19)
Tobden 5:fb3b23290880 144 {if (numb == 1){
Tobden 5:fb3b23290880 145 greenThread.signal_set(0x1);
Tobden 5:fb3b23290880 146 numb = 0;
Tobden 5:fb3b23290880 147 area = LeftIn;
Tobden 5:fb3b23290880 148 break;}
Tobden 5:fb3b23290880 149 }
Tobden 5:fb3b23290880 150 else if (d > 23 && d < 29)
Tobden 5:fb3b23290880 151 {if (numb == 1){
Tobden 5:fb3b23290880 152 blueThread.signal_set(0x1);
Tobden 5:fb3b23290880 153 numb = 0;
Tobden 5:fb3b23290880 154 area = RightIn;
Tobden 5:fb3b23290880 155 break;}
Tobden 5:fb3b23290880 156 }
Tobden 5:fb3b23290880 157
Tobden 5:fb3b23290880 158 else if (d > 33)
Tobden 5:fb3b23290880 159 {if (numb == 1){
Tobden 5:fb3b23290880 160 whiteThread.signal_set(0x1);
Tobden 5:fb3b23290880 161 numb = 0;
Tobden 5:fb3b23290880 162 area = RightOut;
Tobden 5:fb3b23290880 163 break;}
Tobden 5:fb3b23290880 164 }
Tobden 5:fb3b23290880 165 }
WilliamMarshQMUL 1:e6ffa08ad8bf 166 Thread::wait(200); // This polling rate is too slow - increase it
WilliamMarshQMUL 1:e6ffa08ad8bf 167 // The slower rate maks it easier to output on the terminal
WilliamMarshQMUL 0:4374caa1ef17 168 }
Tobden 5:fb3b23290880 169 }