deni setiawan
/
TSI_sample_lab5_part2
fix deni
Fork of TSI_sample by
main.cpp@5:e79b003f2bc5, 2018-03-01 (annotated)
- Committer:
- dhenis
- Date:
- Thu Mar 01 21:04:55 2018 +0000
- Revision:
- 5:e79b003f2bc5
- Parent:
- 4:d54e74fbf82c
fix'
Who changed what in which revision?
User | Revision | Line number | New 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); |
dhenis | 5:e79b003f2bc5 | 13 | DigitalOut blueLED(LED_BLUE); |
dhenis | 5:e79b003f2bc5 | 14 | |
dhenis | 5:e79b003f2bc5 | 15 | DigitalOut ledex1(D0); |
dhenis | 5:e79b003f2bc5 | 16 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 17 | TSISensor tsi; |
dhenis | 5:e79b003f2bc5 | 18 | //Thread redThread(osPriorityNormal, 1000); |
dhenis | 5:e79b003f2bc5 | 19 | //Thread greenThread(osPriorityNormal, 1000); |
dhenis | 5:e79b003f2bc5 | 20 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 21 | |
dhenis | 5:e79b003f2bc5 | 22 | Thread outterleft(osPriorityNormal, 1000); |
dhenis | 5:e79b003f2bc5 | 23 | Thread innerleft(osPriorityNormal, 1000); |
dhenis | 5:e79b003f2bc5 | 24 | Thread innerlight(osPriorityNormal, 1000); |
dhenis | 5:e79b003f2bc5 | 25 | Thread outerright(osPriorityNormal, 1000); // this thread doesnt work, so I directly move it into main thread |
dhenis | 5:e79b003f2bc5 | 26 | |
dhenis | 5:e79b003f2bc5 | 27 | //Thread redThread ; // thread for red LED |
dhenis | 5:e79b003f2bc5 | 28 | //Thread greenThread ; // thread for green LED |
WilliamMarshQMUL | 0:4374caa1ef17 | 29 | |
dhenis | 5:e79b003f2bc5 | 30 | bool red = true,green = true,blue = true,white = true; |
dhenis | 5:e79b003f2bc5 | 31 | |
dhenis | 5:e79b003f2bc5 | 32 | |
dhenis | 5:e79b003f2bc5 | 33 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 34 | void red_thread() { // method to run in thread |
WilliamMarshQMUL | 0:4374caa1ef17 | 35 | while (true) { |
dhenis | 5:e79b003f2bc5 | 36 | |
dhenis | 5:e79b003f2bc5 | 37 | |
dhenis | 5:e79b003f2bc5 | 38 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 39 | Thread::signal_wait(0x1); |
dhenis | 5:e79b003f2bc5 | 40 | |
dhenis | 5:e79b003f2bc5 | 41 | |
dhenis | 5:e79b003f2bc5 | 42 | redLED = !redLED ; // turn on |
dhenis | 5:e79b003f2bc5 | 43 | |
dhenis | 5:e79b003f2bc5 | 44 | outterleft.signal_clr(0x1) ; |
dhenis | 5:e79b003f2bc5 | 45 | |
dhenis | 5:e79b003f2bc5 | 46 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 47 | // Signal are automatically cleared by wait_signal but |
WilliamMarshQMUL | 0:4374caa1ef17 | 48 | // the signal might have been set again while LED on |
WilliamMarshQMUL | 0:4374caa1ef17 | 49 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 50 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 51 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 52 | void green_thread() { // method to run in thread |
WilliamMarshQMUL | 0:4374caa1ef17 | 53 | while (true) { |
dhenis | 5:e79b003f2bc5 | 54 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 55 | Thread::signal_wait(0x1); |
dhenis | 5:e79b003f2bc5 | 56 | |
dhenis | 5:e79b003f2bc5 | 57 | // green = false ; |
dhenis | 5:e79b003f2bc5 | 58 | greenLED = !greenLED ; // turn on |
dhenis | 5:e79b003f2bc5 | 59 | |
dhenis | 5:e79b003f2bc5 | 60 | innerleft.signal_clr(0x1) ; |
dhenis | 5:e79b003f2bc5 | 61 | |
dhenis | 5:e79b003f2bc5 | 62 | |
dhenis | 5:e79b003f2bc5 | 63 | |
dhenis | 5:e79b003f2bc5 | 64 | // Signal are automatically cleared by wait_signal but |
dhenis | 5:e79b003f2bc5 | 65 | // the signal might have been set again while LED on |
dhenis | 5:e79b003f2bc5 | 66 | } |
dhenis | 5:e79b003f2bc5 | 67 | } |
dhenis | 5:e79b003f2bc5 | 68 | |
dhenis | 5:e79b003f2bc5 | 69 | void blue_thread() { // method to run in thread |
dhenis | 5:e79b003f2bc5 | 70 | while (true) { |
dhenis | 5:e79b003f2bc5 | 71 | |
dhenis | 5:e79b003f2bc5 | 72 | |
dhenis | 5:e79b003f2bc5 | 73 | Thread::signal_wait(0x1); |
dhenis | 5:e79b003f2bc5 | 74 | // blue = false; |
dhenis | 5:e79b003f2bc5 | 75 | |
dhenis | 5:e79b003f2bc5 | 76 | blueLED = !blueLED ; // turn on |
dhenis | 5:e79b003f2bc5 | 77 | innerlight.signal_clr(0x1) ; |
dhenis | 5:e79b003f2bc5 | 78 | |
dhenis | 5:e79b003f2bc5 | 79 | |
dhenis | 5:e79b003f2bc5 | 80 | |
dhenis | 5:e79b003f2bc5 | 81 | // Signal are automatically cleared by wait_signal but |
dhenis | 5:e79b003f2bc5 | 82 | // the signal might have been set again while LED on |
dhenis | 5:e79b003f2bc5 | 83 | } |
dhenis | 5:e79b003f2bc5 | 84 | } |
dhenis | 5:e79b003f2bc5 | 85 | |
dhenis | 5:e79b003f2bc5 | 86 | void white_thread() { // method to run in thread |
dhenis | 5:e79b003f2bc5 | 87 | while (true) { |
dhenis | 5:e79b003f2bc5 | 88 | // |
dhenis | 5:e79b003f2bc5 | 89 | Thread::signal_wait(0x1); |
dhenis | 5:e79b003f2bc5 | 90 | |
dhenis | 5:e79b003f2bc5 | 91 | |
dhenis | 5:e79b003f2bc5 | 92 | ledex1 = !ledex1; |
dhenis | 5:e79b003f2bc5 | 93 | // |
dhenis | 5:e79b003f2bc5 | 94 | // blueLED = !blueLED ; // turn off |
dhenis | 5:e79b003f2bc5 | 95 | // greenLED = !greenLED; // turn off |
dhenis | 5:e79b003f2bc5 | 96 | // redLED = !redLED ; // turn off |
dhenis | 5:e79b003f2bc5 | 97 | |
dhenis | 5:e79b003f2bc5 | 98 | outerright.signal_clr(0x1) ; |
dhenis | 5:e79b003f2bc5 | 99 | |
dhenis | 5:e79b003f2bc5 | 100 | |
dhenis | 5:e79b003f2bc5 | 101 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 102 | // Signal are automatically cleared by wait_signal but |
WilliamMarshQMUL | 0:4374caa1ef17 | 103 | // the signal might have been set again while LED on |
WilliamMarshQMUL | 0:4374caa1ef17 | 104 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 105 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 106 | |
dhenis | 5:e79b003f2bc5 | 107 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 108 | int main(void) { |
WilliamMarshQMUL | 0:4374caa1ef17 | 109 | |
dhenis | 5:e79b003f2bc5 | 110 | int position = 1; //checking state |
dhenis | 5:e79b003f2bc5 | 111 | |
dhenis | 5:e79b003f2bc5 | 112 | outterleft.start(&red_thread) ; // start the red thread |
dhenis | 5:e79b003f2bc5 | 113 | innerleft.start(&green_thread) ; // start the green thread |
dhenis | 5:e79b003f2bc5 | 114 | innerlight.start(&blue_thread) ; // start the green thread |
dhenis | 5:e79b003f2bc5 | 115 | outerright.start(&white_thread) ; // start the green thread |
dhenis | 5:e79b003f2bc5 | 116 | |
dhenis | 5:e79b003f2bc5 | 117 | |
dhenis | 5:e79b003f2bc5 | 118 | blueLED = true ; // turn off |
dhenis | 5:e79b003f2bc5 | 119 | greenLED = true; // turn off |
dhenis | 5:e79b003f2bc5 | 120 | redLED = true ; // turn off |
dhenis | 5:e79b003f2bc5 | 121 | |
dhenis | 5:e79b003f2bc5 | 122 | ledex1 = false; |
dhenis | 5:e79b003f2bc5 | 123 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 124 | while (true) { |
dhenis | 5:e79b003f2bc5 | 125 | // uint8_t d = tsi.readDistance() ; // Distance is between 0 and 39 |
WilliamMarshQMUL | 0:4374caa1ef17 | 126 | // When no touch --> 0 |
WilliamMarshQMUL | 0:4374caa1ef17 | 127 | // Left --> low value Right --> high value |
dhenis | 5:e79b003f2bc5 | 128 | // signals are triggered by touching the sri |
dhenis | 5:e79b003f2bc5 | 129 | // signal set on addres 0x1 |
dhenis | 5:e79b003f2bc5 | 130 | |
dhenis | 5:e79b003f2bc5 | 131 | uint8_t pos = tsi.readDistance() ; // Distance is between 0 and 39 |
dhenis | 5:e79b003f2bc5 | 132 | |
dhenis | 5:e79b003f2bc5 | 133 | // |
dhenis | 5:e79b003f2bc5 | 134 | // redLED = true; |
dhenis | 5:e79b003f2bc5 | 135 | // greenLED = true; |
dhenis | 5:e79b003f2bc5 | 136 | // blueLED = true; |
dhenis | 5:e79b003f2bc5 | 137 | |
dhenis | 5:e79b003f2bc5 | 138 | if(pos >3 and pos < 9){ // softkey outterleft |
dhenis | 5:e79b003f2bc5 | 139 | |
dhenis | 5:e79b003f2bc5 | 140 | |
dhenis | 5:e79b003f2bc5 | 141 | //state entry |
dhenis | 5:e79b003f2bc5 | 142 | // redLED = !redLED ; // turn on |
dhenis | 5:e79b003f2bc5 | 143 | if(position == 1){ |
dhenis | 5:e79b003f2bc5 | 144 | |
dhenis | 5:e79b003f2bc5 | 145 | outterleft.signal_set(0x1) ; |
dhenis | 5:e79b003f2bc5 | 146 | |
dhenis | 5:e79b003f2bc5 | 147 | position = 0; |
dhenis | 5:e79b003f2bc5 | 148 | |
dhenis | 5:e79b003f2bc5 | 149 | } |
dhenis | 5:e79b003f2bc5 | 150 | |
dhenis | 5:e79b003f2bc5 | 151 | |
dhenis | 5:e79b003f2bc5 | 152 | }else if(pos ==3 or pos ==9){ |
dhenis | 5:e79b003f2bc5 | 153 | //state exit |
dhenis | 5:e79b003f2bc5 | 154 | redLED = true; // turn of |
dhenis | 5:e79b003f2bc5 | 155 | // outterleft.signal_set(0x1) ; |
dhenis | 5:e79b003f2bc5 | 156 | |
dhenis | 5:e79b003f2bc5 | 157 | |
dhenis | 5:e79b003f2bc5 | 158 | }else if(pos >13 and pos < 19){// softkey innerleft |
dhenis | 5:e79b003f2bc5 | 159 | //state entry |
dhenis | 5:e79b003f2bc5 | 160 | // greenLED = !greenLED; // turn on |
dhenis | 5:e79b003f2bc5 | 161 | |
dhenis | 5:e79b003f2bc5 | 162 | if(position == 1){ |
dhenis | 5:e79b003f2bc5 | 163 | |
dhenis | 5:e79b003f2bc5 | 164 | innerleft.signal_set(0x1) ; |
dhenis | 5:e79b003f2bc5 | 165 | |
dhenis | 5:e79b003f2bc5 | 166 | position = 0; |
dhenis | 5:e79b003f2bc5 | 167 | } |
dhenis | 5:e79b003f2bc5 | 168 | |
dhenis | 5:e79b003f2bc5 | 169 | }else if(pos ==13 or pos ==19){ |
dhenis | 5:e79b003f2bc5 | 170 | //state exit |
dhenis | 5:e79b003f2bc5 | 171 | greenLED = true; // turn of |
dhenis | 5:e79b003f2bc5 | 172 | |
dhenis | 5:e79b003f2bc5 | 173 | // innerleft.signal_set(0x2) ; |
dhenis | 5:e79b003f2bc5 | 174 | |
dhenis | 5:e79b003f2bc5 | 175 | |
dhenis | 5:e79b003f2bc5 | 176 | }else if(pos >23 and pos < 29){ // softkey innerlight |
dhenis | 5:e79b003f2bc5 | 177 | //state entry |
dhenis | 5:e79b003f2bc5 | 178 | // blueLED = !blueLED; // turn on |
dhenis | 5:e79b003f2bc5 | 179 | |
dhenis | 5:e79b003f2bc5 | 180 | if(position == 1){ |
dhenis | 5:e79b003f2bc5 | 181 | |
dhenis | 5:e79b003f2bc5 | 182 | innerlight.signal_set(0x1) ; |
dhenis | 5:e79b003f2bc5 | 183 | |
dhenis | 5:e79b003f2bc5 | 184 | position = 0; |
dhenis | 5:e79b003f2bc5 | 185 | } |
dhenis | 5:e79b003f2bc5 | 186 | |
dhenis | 5:e79b003f2bc5 | 187 | }else if(pos ==23 or pos ==29){ |
dhenis | 5:e79b003f2bc5 | 188 | //state exit |
dhenis | 5:e79b003f2bc5 | 189 | blueLED = true; // turn of |
dhenis | 5:e79b003f2bc5 | 190 | |
dhenis | 5:e79b003f2bc5 | 191 | |
dhenis | 5:e79b003f2bc5 | 192 | |
dhenis | 5:e79b003f2bc5 | 193 | }else if(pos >=34 and pos <40){ // softkye outerright |
dhenis | 5:e79b003f2bc5 | 194 | //state entry |
dhenis | 5:e79b003f2bc5 | 195 | |
dhenis | 5:e79b003f2bc5 | 196 | if(position == 1){ |
dhenis | 5:e79b003f2bc5 | 197 | |
dhenis | 5:e79b003f2bc5 | 198 | ledex1 = !ledex1; |
dhenis | 5:e79b003f2bc5 | 199 | |
dhenis | 5:e79b003f2bc5 | 200 | position = 0; |
dhenis | 5:e79b003f2bc5 | 201 | } |
dhenis | 5:e79b003f2bc5 | 202 | |
dhenis | 5:e79b003f2bc5 | 203 | |
dhenis | 5:e79b003f2bc5 | 204 | } |
dhenis | 5:e79b003f2bc5 | 205 | else if(pos ==33){ |
dhenis | 5:e79b003f2bc5 | 206 | //state exit |
dhenis | 5:e79b003f2bc5 | 207 | |
dhenis | 5:e79b003f2bc5 | 208 | ledex1 = false; |
dhenis | 5:e79b003f2bc5 | 209 | |
dhenis | 5:e79b003f2bc5 | 210 | |
dhenis | 5:e79b003f2bc5 | 211 | } |
dhenis | 5:e79b003f2bc5 | 212 | else if(pos == 0) { |
dhenis | 5:e79b003f2bc5 | 213 | position = 1; |
dhenis | 5:e79b003f2bc5 | 214 | |
dhenis | 5:e79b003f2bc5 | 215 | |
dhenis | 5:e79b003f2bc5 | 216 | } |
dhenis | 5:e79b003f2bc5 | 217 | |
dhenis | 5:e79b003f2bc5 | 218 | |
dhenis | 5:e79b003f2bc5 | 219 | |
dhenis | 5:e79b003f2bc5 | 220 | |
dhenis | 5:e79b003f2bc5 | 221 | pc.printf("%d \n \r", pos ) ; |
WilliamMarshQMUL | 1:e6ffa08ad8bf | 222 | pc.putc(' ') ; |
dhenis | 5:e79b003f2bc5 | 223 | // if (d == 10) redThread.signal_set(0x1) ; |
dhenis | 5:e79b003f2bc5 | 224 | // if (d == 20) greenThread.signal_set(0x1) ; |
dhenis | 5:e79b003f2bc5 | 225 | |
WilliamMarshQMUL | 1:e6ffa08ad8bf | 226 | Thread::wait(200); // This polling rate is too slow - increase it |
WilliamMarshQMUL | 1:e6ffa08ad8bf | 227 | // The slower rate maks it easier to output on the terminal |
WilliamMarshQMUL | 0:4374caa1ef17 | 228 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 229 | } |