fix deni

Dependencies:   TSI

Fork of TSI_sample by William Marsh

Committer:
dhenis
Date:
Thu Mar 01 21:04:55 2018 +0000
Revision:
5:e79b003f2bc5
Parent:
4:d54e74fbf82c
fix'

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);
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 }