Alif Ahmed
/
TSI_part1
TSI and control of leds
Revision 7:850764512ca0, committed 2020-03-20
- Comitter:
- alifsohen
- Date:
- Fri Mar 20 04:05:11 2020 +0000
- Parent:
- 6:71ef35e456ab
- Commit message:
- TSI and control of leds
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed_app.json | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Feb 20 11:28:36 2020 +0000 +++ b/main.cpp Fri Mar 20 04:05:11 2020 +0000 @@ -10,53 +10,154 @@ Serial pc(USBTX, USBRX); // tx, rx DigitalOut redLED(LED_RED); DigitalOut greenLED(LED_GREEN); +DigitalOut blueLED(LED_BLUE); TSISensor tsi; Thread redThread ; // thread for red LED Thread greenThread ; // thread for green LED +Thread blueThread ; # define REDFLAG 0x01 # define GREENFLAG 0x02 + +# define BLUEFLAG 0x04 +# define EXFLAG 0x08 + EventFlags signals; // event flags for signalling; 2 used void red_thread() { // method to run in thread +enum redState{ON, OFF}; + redLED = true ; // off + redState state = OFF ; while (true) { - signals.wait_any(REDFLAG); - redLED = false ; // turn on - ThisThread::sleep_for(5000) ; // wait(5.0); - redLED = true ; // turn off - signals.clear(REDFLAG) ; + switch (state) { + case OFF: + signals.wait_any(REDFLAG); + redLED = false ; // turn on + state = ON ; + break ; + case ON: + signals.wait_any(REDFLAG); + redLED = true; // turn off + state = OFF ; + break ; + } + //signals.clear(REDFLAG) ; // Signal are automatically cleared by wait_any but // the signal might have been set again while LED on } } void green_thread() { // method to run in thread +enum greenState{ON, OFF}; + greenLED = true ; // off + greenState state = OFF ; while (true) { - signals.wait_any(GREENFLAG); - greenLED = false ; // turn on - ThisThread::sleep_for(5000) ; // wait(5.0); - greenLED = true ; // turn off - signals.clear(GREENFLAG) ; + switch (state) { + case OFF: + signals.wait_any(GREENFLAG); + greenLED = false ; // turn on + state = ON ; + break ; + case ON: + signals.wait_any(GREENFLAG); + greenLED = true; // turn off + state = OFF ; + break ; + } + + //signals.clear(GREENFLAG) ; + // Signal are automatically cleared by wait_any but + // the signal might have been set again while LED on + } +} + +void blue_thread() { // method to run in thread +enum blueState{ON, OFF}; + blueLED = true ; // off + blueState state = OFF ; + while (true) { + switch (state) { + case OFF: + signals.wait_any(BLUEFLAG); + blueLED = false ; // turn on + state = ON ; + break ; + case ON: + signals.wait_any(BLUEFLAG); + blueLED = true; // turn off + state = OFF ; + break ; + } + //signals.clear(BLUEFLAG) ; // Signal are automatically cleared by wait_any but // the signal might have been set again while LED on } } + int main(void) { - redLED = true ; // turn off - greenLED = true ; // turn off + //redLED = true ; // turn off + //greenLED = true ; // turn off + //blueLED = true ; // turn off redThread.start(red_thread) ; // start the red thread greenThread.start(green_thread) ; // start the green thread + blueThread.start(blue_thread) ; // start the blue thread + + enum ledState{none, leftout, leftin, rightout, rightin}; + ledState pos = none; while (true) { uint8_t d = tsi.readDistance() ; // Distance is between 0 and 39 // When no touch --> 0 - // Left --> low value Right --> high value - pc.printf("%d", d) ; + // Left --> low value Right --> high value + switch (pos) { + case none: + if (d > 3 && d < 9) { + signals.set(REDFLAG); + pos = leftout; + } + if (d > 13 && d < 19) { + signals.set(GREENFLAG); + pos = leftin; + } + if (d > 23 && d < 29) { + signals.set(BLUEFLAG); + pos = rightin; + } + if (d > 33) { + signals.set(EXFLAG); + pos = rightout; + } + break ; + + case leftout: + if (d < 3 || d > 9) { + pos = none; + } + break ; + + case leftin: + if (d < 13 || d > 19) { + pos = none; + } + break ; + + case rightin: + if (d < 23 || d > 29) { + pos = none; + } + break ; + + case rightout: + if (d < 33) { + pos = none; + } + break ; + } + + pc.printf("%d", d) ; pc.putc(' ') ; - if (d == 10) signals.set(REDFLAG) ; - if (d == 20) signals.set(GREENFLAG) ; ThisThread::sleep_for(500) ; // This polling rate is too slow - increase it // The slower rate maks it easier to output on the terminal }
--- a/mbed_app.json Thu Feb 20 11:28:36 2020 +0000 +++ b/mbed_app.json Fri Mar 20 04:05:11 2020 +0000 @@ -2,6 +2,9 @@ "config": { "main-stack-size": { "value": 2000 + }, + "thread-stack-size": { + "value": 1000 } } } \ No newline at end of file