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.
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 DigitalOut redLED(LED_RED); 00012 DigitalOut greenLED(LED_GREEN); 00013 DigitalOut blueLED(LED_BLUE); 00014 TSISensor tsi; 00015 00016 Thread redThread ; // thread for red LED 00017 Thread greenThread ; // thread for green LED 00018 Thread blueThread ; 00019 00020 # define REDFLAG 0x01 00021 # define GREENFLAG 0x02 00022 00023 # define BLUEFLAG 0x04 00024 # define EXFLAG 0x08 00025 00026 EventFlags signals; // event flags for signalling; 2 used 00027 00028 void red_thread() { // method to run in thread 00029 enum redState{ON, OFF}; 00030 redLED = true ; // off 00031 redState state = OFF ; 00032 while (true) { 00033 switch (state) { 00034 case OFF: 00035 signals.wait_any(REDFLAG); 00036 redLED = false ; // turn on 00037 state = ON ; 00038 break ; 00039 case ON: 00040 signals.wait_any(REDFLAG); 00041 redLED = true; // turn off 00042 state = OFF ; 00043 break ; 00044 } 00045 //signals.clear(REDFLAG) ; 00046 // Signal are automatically cleared by wait_any but 00047 // the signal might have been set again while LED on 00048 } 00049 } 00050 00051 void green_thread() { // method to run in thread 00052 enum greenState{ON, OFF}; 00053 greenLED = true ; // off 00054 greenState state = OFF ; 00055 while (true) { 00056 switch (state) { 00057 case OFF: 00058 signals.wait_any(GREENFLAG); 00059 greenLED = false ; // turn on 00060 state = ON ; 00061 break ; 00062 case ON: 00063 signals.wait_any(GREENFLAG); 00064 greenLED = true; // turn off 00065 state = OFF ; 00066 break ; 00067 } 00068 00069 //signals.clear(GREENFLAG) ; 00070 // Signal are automatically cleared by wait_any but 00071 // the signal might have been set again while LED on 00072 } 00073 } 00074 00075 void blue_thread() { // method to run in thread 00076 enum blueState{ON, OFF}; 00077 blueLED = true ; // off 00078 blueState state = OFF ; 00079 while (true) { 00080 switch (state) { 00081 case OFF: 00082 signals.wait_any(BLUEFLAG); 00083 blueLED = false ; // turn on 00084 state = ON ; 00085 break ; 00086 case ON: 00087 signals.wait_any(BLUEFLAG); 00088 blueLED = true; // turn off 00089 state = OFF ; 00090 break ; 00091 } 00092 //signals.clear(BLUEFLAG) ; 00093 // Signal are automatically cleared by wait_any but 00094 // the signal might have been set again while LED on 00095 } 00096 } 00097 00098 00099 int main(void) { 00100 //redLED = true ; // turn off 00101 //greenLED = true ; // turn off 00102 //blueLED = true ; // turn off 00103 redThread.start(red_thread) ; // start the red thread 00104 greenThread.start(green_thread) ; // start the green thread 00105 blueThread.start(blue_thread) ; // start the blue thread 00106 00107 enum ledState{none, leftout, leftin, rightout, rightin}; 00108 ledState pos = none; 00109 00110 while (true) { 00111 uint8_t d = tsi.readDistance() ; // Distance is between 0 and 39 00112 // When no touch --> 0 00113 // Left --> low value Right --> high value 00114 switch (pos) { 00115 case none: 00116 if (d > 3 && d < 9) { 00117 signals.set(REDFLAG); 00118 pos = leftout; 00119 } 00120 if (d > 13 && d < 19) { 00121 signals.set(GREENFLAG); 00122 pos = leftin; 00123 } 00124 if (d > 23 && d < 29) { 00125 signals.set(BLUEFLAG); 00126 pos = rightin; 00127 } 00128 if (d > 33) { 00129 signals.set(EXFLAG); 00130 pos = rightout; 00131 } 00132 break ; 00133 00134 case leftout: 00135 if (d < 3 || d > 9) { 00136 pos = none; 00137 } 00138 break ; 00139 00140 case leftin: 00141 if (d < 13 || d > 19) { 00142 pos = none; 00143 } 00144 break ; 00145 00146 case rightin: 00147 if (d < 23 || d > 29) { 00148 pos = none; 00149 } 00150 break ; 00151 00152 case rightout: 00153 if (d < 33) { 00154 pos = none; 00155 } 00156 break ; 00157 } 00158 00159 pc.printf("%d", d) ; 00160 pc.putc(' ') ; 00161 ThisThread::sleep_for(500) ; // This polling rate is too slow - increase it 00162 // The slower rate maks it easier to output on the terminal 00163 } 00164 }
Generated on Sun Jul 24 2022 16:06:13 by
1.7.2