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 //Lab 5 part 2 00005 00006 Serial pc(USBTX, USBRX); // tx, rx 00007 PwmOut redLED(LED_RED); 00008 PwmOut greenLED(LED_GREEN); 00009 TSISensor tsi; 00010 Timer t; 00011 00012 enum pos{neutral, lo, li, ri, ro}; 00013 00014 Thread green ; // thread for green LED 00015 Thread red ; // thread for red LED 00016 00017 # define lout 0x01 00018 # define lin 0x02 00019 # define rin 0x04 00020 # define rout 0x08 00021 EventFlags signals; 00022 volatile uint32_t flags_red; 00023 volatile uint32_t flags_green; 00024 00025 void changebrightnessred() { // method to run in thread 00026 float i=0; 00027 while (true) { 00028 signals.wait_any(lin,osWaitForever,false);//Run thread indefinitely after left is is pressed 00029 flags_red=signals.wait_any(lout|rout,osWaitForever,true); 00030 if (flags_red==3){//If left out is pressed, less brightness 00031 if (i!=0) i--; 00032 } 00033 if (flags_red==10){//If right out is pressed, more brightness 00034 if (i!=9) i++; 00035 } 00036 signals.clear(lout); 00037 signals.clear(rout); 00038 //pc.printf("flags_red: %d, red: %f \n ",flags_red, i); 00039 redLED= 1-i/10; 00040 } 00041 } 00042 00043 void changebrightnessgreen() { // method to run in thread 00044 float i=0; 00045 while (true) { 00046 signals.wait_any(rin,osWaitForever,false);//Run indefinitely after right in pressed 00047 flags_green=signals.wait_any(lout|rout,osWaitForever,true); 00048 if (flags_green==5){//Left out less brightness 00049 if (i!=0) i--; 00050 } 00051 if (flags_green==12){//Right out more brightness 00052 if (i!=9) i++; 00053 } 00054 signals.clear(lout); 00055 signals.clear(rout); 00056 //pc.printf("flags_green: %d, green: %f \n",flags_green, i); 00057 greenLED= 1-i/10; 00058 } 00059 } 00060 00061 int main(void) { 00062 redLED = true ; // turn off 00063 greenLED = true ; // turn off 00064 red.start(changebrightnessgreen) ; // start the red thread 00065 green.start(changebrightnessred) ; // start the green thread 00066 int pos=neutral; 00067 while (true) { 00068 uint8_t d = tsi.readDistance() ; // Distance is between 0 and 39 00069 // When no touch --> 0 00070 // Left --> low value Right --> high value 00071 switch (pos){ 00072 case neutral: 00073 if (d>3 && d<9){pos=lo; signals.set(lout); t.start();} 00074 if (d>13 && d<19){pos=li; signals.set(lin); signals.clear(rin);} //Select LED 00075 if (d>23 && d<29){pos=ri; signals.set(rin);signals.clear(lin);} //Select LED 00076 if (d>33){pos=ro; signals.set(rout); t.start();} 00077 break; 00078 case lo: 00079 if (t.read()>1) {signals.set(lout); t.reset();}//Repeat event after 1 second 00080 if (d<3 || d>9) {pos=neutral; t.reset(); t.stop();} 00081 break; 00082 case li: 00083 if (d<13 || d>19) {pos=neutral; } 00084 break; 00085 case ri: 00086 if (d<23 || d>29) {pos=neutral; } 00087 break; 00088 case ro: 00089 if (t.read()>1) {signals.set(rout);t.reset();}//repeat event after 1 second 00090 if (d<33) {pos=neutral; t.reset(); t.stop();} 00091 break; 00092 } 00093 //pc.printf("%d, position: %d", d, pos) ; 00094 //pc.putc(' ') ; 00095 ThisThread::sleep_for(50) ; 00096 } 00097 }
Generated on Sat Jul 16 2022 07:05:06 by
1.7.2