Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TSI_sample by
main.cpp
00001 #include "mbed.h" 00002 #include "TSISensor.h" 00003 00004 // Example program for lab 5 00005 // ------------------------- 00006 // A value is read from the touch sensor and use 00007 // to control two LEDs 00008 // The value is also output to the serial interface 00009 00010 Serial pc(USBTX, USBRX); // tx, rx 00011 00012 DigitalOut redLED(LED_RED); 00013 DigitalOut greenLED(LED_GREEN); 00014 DigitalOut blueLED(LED_BLUE); 00015 DigitalOut whiteLED(PTC9); // External LED 00016 00017 TSISensor tsi; 00018 00019 Thread leftOutThread (osPriorityNormal, 1000); 00020 Thread leftInThread (osPriorityNormal, 1000); 00021 Thread rightInThread (osPriorityNormal, 1000); 00022 Thread rightOutThread (osPriorityNormal, 1000); 00023 00024 enum states { LeftOut, LeftIn, RightIn, RightOut, None}; 00025 volatile states state = None; 00026 00027 00028 00029 //void green_thread() { // method to run in thread 00030 // while (true) { 00031 // Thread::signal_wait(0x1); 00032 // greenLED = !greenLED ; // turn on 00033 // 00034 // greenThread.signal_clr(0x1) ; 00035 // // Signal are automatically cleared by wait_signal but 00036 // // the signal might have been set again while LED on 00037 // } 00038 //} 00039 00040 //void TurnOnLed(int ledNumber) 00041 //{ 00042 // switch (ledNumber) { 00043 // case 1: 00044 // redLED = false; 00045 // greenLED = true; 00046 // blueLED = true; 00047 // 00048 // whiteLED = 0; 00049 // break; 00050 // 00051 // case 2: 00052 // redLED = true; 00053 // greenLED = false; 00054 // blueLED = true; 00055 // 00056 // whiteLED = 0; 00057 // break; 00058 // 00059 // case 3: 00060 // redLED = true; 00061 // greenLED = true; 00062 // blueLED = false; 00063 // 00064 // whiteLED = 0; 00065 // break; 00066 // 00067 // case 4: 00068 // redLED = true; 00069 // greenLED = true; 00070 // blueLED = true; 00071 // 00072 // whiteLED = 1; 00073 // break; 00074 // } 00075 //} 00076 00077 void TurnOffLed() 00078 { 00079 redLED = true; 00080 greenLED = true; 00081 blueLED = true; 00082 whiteLED = 0; 00083 00084 } 00085 00086 00087 void leftOut_thread() // method to run in thread 00088 { 00089 while (true) { 00090 Thread::signal_wait(0x1); // signal for enter 00091 redLED = false; 00092 00093 Thread::signal_wait(0x1); // signal for exit 00094 redLED = true; 00095 00096 leftOutThread.signal_clr(0x1); 00097 leftOutThread.signal_clr(0x2); 00098 // Signal are automatically cleared by wait_signal but 00099 // the signal might have been set again 00100 } 00101 } 00102 00103 void leftIn_thread() // method to run in thread 00104 { 00105 while (true) { 00106 Thread::signal_wait(0x1); // signal for enter 00107 greenLED = false; 00108 00109 Thread::signal_wait(0x1); // signal for exit 00110 greenLED = true; 00111 00112 leftInThread.signal_clr(0x1); 00113 leftInThread.signal_clr(0x2); 00114 // Signal are automatically cleared by wait_signal but 00115 // the signal might have been set again 00116 } 00117 } 00118 00119 00120 void rightIn_thread() // method to run in thread 00121 { 00122 while (true) { 00123 Thread::signal_wait(0x1); // signal for enter 00124 blueLED = !blueLED; 00125 00126 Thread::signal_wait(0x1); // signal for exit 00127 blueLED = !blueLED; 00128 00129 rightInThread.signal_clr(0x1); 00130 rightInThread.signal_clr(0x2); 00131 // Signal are automatically cleared by wait_signal but 00132 // the signal might have been set again 00133 } 00134 } 00135 00136 00137 void rightOut_thread() // method to run in thread 00138 { 00139 while (true) { 00140 Thread::signal_wait(0x1); // signal for enter 00141 whiteLED = 1; 00142 00143 Thread::signal_wait(0x1); // signal for exit 00144 whiteLED = 0; 00145 00146 rightOutThread.signal_clr(0x1); 00147 rightOutThread.signal_clr(0x2); 00148 // Signal are automatically cleared by wait_signal but 00149 // the signal might have been set again 00150 } 00151 } 00152 00153 00154 00155 00156 int main(void) 00157 { 00158 TurnOffLed(); // initial turning off LED 00159 00160 leftOutThread.start(&leftOut_thread) ; // start the leftOut thread 00161 leftInThread.start(&leftIn_thread) ; // start the leftIn thread 00162 rightInThread.start(&rightIn_thread) ; // start the rightIn thread 00163 rightOutThread.start(&rightOut_thread) ; // start the rightOut thread 00164 00165 while (true) { 00166 uint8_t pos = tsi.readDistance() ; // Distance is between 0 and 39 00167 00168 pc.printf("%d", pos) ; 00169 pc.putc(' ') ; 00170 00171 // // start states 00172 // if (pos>3 && pos<9) { 00173 // leftOutThread.signal_set(0x1); 00174 // } else if(pos>13 && pos<19) { 00175 // leftInThread.signal_set(0x1); 00176 // } else if(pos>23 && pos<29) { 00177 // rightInThread.signal_set(0x1); 00178 // } else if(pos>33) { 00179 // rightOutThread.signal_set(0x1); 00180 // } 00181 00182 switch (state) { 00183 case LeftOut: 00184 if(pos<3 || pos>9) { 00185 state = None ; 00186 } 00187 break; 00188 00189 case LeftIn: 00190 if(pos<13 || pos>19) { 00191 state = None ; 00192 } 00193 break; 00194 00195 case RightIn: 00196 if(pos<23 || pos>29) { 00197 state = None ; 00198 } 00199 00200 break; 00201 00202 case RightOut: 00203 if(pos<33) { 00204 state = None ; 00205 } 00206 break; 00207 00208 case None: 00209 if(pos>3 && pos<9) { 00210 state = LeftOut; 00211 leftOutThread.signal_set(0x1); 00212 } 00213 if(pos>13 && pos<19) { 00214 state = LeftIn; 00215 leftInThread.signal_set(0x1); 00216 } 00217 if(pos>23 && pos<29) { 00218 state = RightIn; 00219 rightInThread.signal_set(0x1); 00220 } 00221 if(pos>33) { 00222 state = RightOut; 00223 rightOutThread.signal_set(0x1); 00224 } 00225 00226 break; 00227 00228 } 00229 00230 00231 Thread::wait(100); // This polling rate is too slow - increase it 00232 // The slower rate maks it easier to output on the terminal 00233 } 00234 }
Generated on Sat Jul 16 2022 02:49:46 by
1.7.2
