1 sensor using RTOS Timer, another 2 over RTOS Semaphore
Dependents: Autonomous_quadcopter
Fork of HCSR04 by
Revision 13:e9b99635aa2d, committed 2018-05-22
- Comitter:
- edy05
- Date:
- Tue May 22 19:35:58 2018 +0000
- Parent:
- 12:6f6469b2f016
- Commit message:
- Final updates
Changed in this revision
diff -r 6f6469b2f016 -r e9b99635aa2d front_back_sensors.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/front_back_sensors.h Tue May 22 19:35:58 2018 +0000 @@ -0,0 +1,141 @@ +#include "mbed.h" +#include "rtos.h" +#include "hardware.h" + + +void front_sensor(void); +void back_sensor(void); + +void semaphore_thread(void const *name){ + pc.printf("Starting semaphore thread\n\r"); + while (true) { + _semaphore.wait(); + //pc.printf("%s\n\r", (const char*)name); + if(strstr((const char*)name, "frontSensor") != NULL) + front_sensor(); + if(strstr((const char*)name, "backSensor") != NULL) + back_sensor(); + + Thread::wait(100); + _semaphore.release(); + } + +} + +void front_sensor(){ + DigitalOut trig(p7); + DigitalIn echo(p8); + bool tooLong = false; + Timer timer; + + timer.start(); + trig=1; + wait_us(10); + trig=0; + while(!echo){ + if(timer.read_us() > 5000) + tooLong = true; + } + if(tooLong == false){ + timer.reset(); + while(echo){ + if(timer.read_us() > 5000) + break; + } + _frontDistance = timer.read_us() / 58; + //_frontWall = true; + //pc.printf("front distance %d \n\n\r", _frontDistance); + } +} + +void back_sensor(){ + DigitalOut trig(p19); + DigitalIn echo(p20); + bool tooLong = false; + Timer timer; + + //printf("left sensor started \n\r"); + timer.start(); + trig=1; + wait_us(10); + trig=0; + while(!echo){ + if(timer.read_us() > 5000) + tooLong = true; + } + timer.reset(); + if(tooLong == false){ + timer.reset(); + while(echo){ + if(timer.read_us() > 5000) + break; + } + _backDistance = timer.read_us() / 58; + //_backWall = true; + //pc.printf(" back distance %d \n\n\r", _backDistance); + } + +} + +/* +void left_sensor(){ + DigitalOut trig(p19); + DigitalIn echo(p20); + bool tooLong = false; + Timer timer; + //printf("left sensor started \n\r"); + timer.start(); + //while(1){ + trig=1; // trigger high + //printf("trig\n\r"); + wait_us(10); + //printf("wait\n\r"); + trig=0; // trigger low + // start pulseIN + while(!echo){ + if(timer.read_us() > 5000) + tooLong = true; + } + if(tooLong == false){ + timer.reset(); + while(echo){ + if(timer.read_us() > 5000) + break; + } + _leftDistance = timer.read_us() / 58; + if(_leftDistance <= 30) + _leftWall = true; + //pc.printf("left distance %d \n\n\r", _leftDistance); + } + //Thread::wait(100); + //} + +} + +void right_sensor(){ + DigitalOut trig(p17); + DigitalIn echo(p18); + + Timer timer; + //printf("left sensor started \n\r"); + timer.start(); + //while(1){ + trig=1; // trigger high + //printf("trig\n\r"); + wait_us(10); + //printf("wait\n\r"); + trig=0; // trigger low + // start pulseIN + while(!echo); + timer.reset(); + while(echo); + _rightDistance = timer.read_us() / 58; + if(_rightDistance <= 40) + _rightWall = true; + pc.printf("right distance %d \n\n\r", _rightDistance); + + //Thread::wait(100); + //} + +} +*/
diff -r 6f6469b2f016 -r e9b99635aa2d front_sensor.h --- a/front_sensor.h Tue May 15 10:32:08 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,132 +0,0 @@ -#include "mbed.h" -#include "rtos.h" -#include "hardware.h" - - -void front_sensor(void); -void left_sensor(void); -void right_sensor(void); -void back_sensor(void); - -void semaphore_thread(void const *name){ - pc.printf("Starting semaphore thread\n\r"); - while (true) { - _semaphore.wait(); - //pc.printf("%s\n\r", (const char*)name); - - if(strstr((const char*)name, "leftSensor") != NULL) - left_sensor(); - if(strstr((const char*)name, "frontSensor") != NULL) - front_sensor(); - if(strstr((const char*)name, "rightSensor") != NULL) - right_sensor(); - if(strstr((const char*)name, "backSensor") != NULL) - back_sensor(); - - - Thread::wait(100); - _semaphore.release(); - } - -} - -void front_sensor(){ - DigitalOut trig(p7); - DigitalIn echo(p8); - - Timer timer; - //printf("front sensor started \n\r"); - timer.start(); - //while(1){ - trig=1; // trigger high - //printf("trig\n\r"); - wait_us(10); - //printf("wait\n\r"); - trig=0; // trigger low - // start pulseIN - while(!echo); - timer.reset(); - while(echo); - _frontDistance = timer.read_us() / 58; - //printf("front distance %d \n\n\r", _frontDistance); - - //Thread::wait(100); - //} - - -} - -void left_sensor(){ - DigitalOut trig(p19); - DigitalIn echo(p20); - - Timer timer; - //printf("left sensor started \n\r"); - timer.start(); - //while(1){ - trig=1; // trigger high - //printf("trig\n\r"); - wait_us(10); - //printf("wait\n\r"); - trig=0; // trigger low - // start pulseIN - while(!echo); - timer.reset(); - while(echo); - _leftDistance = timer.read_us() / 58; - //pc.printf("left distance %d \n\n\r", _leftDistance); - - //Thread::wait(100); - //} - -} - -void right_sensor(){ - DigitalOut trig(p17); - DigitalIn echo(p18); - - Timer timer; - //printf("left sensor started \n\r"); - timer.start(); - //while(1){ - trig=1; // trigger high - //printf("trig\n\r"); - wait_us(10); - //printf("wait\n\r"); - trig=0; // trigger low - // start pulseIN - while(!echo); - timer.reset(); - while(echo); - _rightDistance = timer.read_us() / 58; - //pc.printf("left distance %d \n\n\r", _leftDistance); - - //Thread::wait(100); - //} - -} - -void back_sensor(){ - DigitalOut trig(p15); - DigitalIn echo(p16); - - Timer timer; - //printf("left sensor started \n\r"); - timer.start(); - //while(1){ - trig=1; // trigger high - //printf("trig\n\r"); - wait_us(10); - //printf("wait\n\r"); - trig=0; // trigger low - // start pulseIN - while(!echo); - timer.reset(); - while(echo); - _backDistance = timer.read_us() / 58; - //pc.printf("left distance %d \n\n\r", _leftDistance); - - //Thread::wait(100); - //} - -} \ No newline at end of file
diff -r 6f6469b2f016 -r e9b99635aa2d hcsr04.cpp --- a/hcsr04.cpp Tue May 15 10:32:08 2018 +0000 +++ b/hcsr04.cpp Tue May 22 19:35:58 2018 +0000 @@ -14,6 +14,9 @@ threadUpdateTimer1 = new RtosTimer(threadWorker1, osTimerPeriodic, this); threadUpdateTimer1->start(rate); + id = Thread::gettid(); + printf("down sonic gettid 0x%08X \n\r", id); + //threadUpdateTimer2 = new RtosTimer(threadWorker2, osTimerPeriodic, this); //threadUpdateTimer2->start(rate); }
diff -r 6f6469b2f016 -r e9b99635aa2d hcsr04.h --- a/hcsr04.h Tue May 15 10:32:08 2018 +0000 +++ b/hcsr04.h Tue May 22 19:35:58 2018 +0000 @@ -56,11 +56,14 @@ Timer timerLimit; Timer timer2; + osThreadId id; + RtosTimer *threadUpdateTimer1; RtosTimer *threadUpdateTimer2; float distan1; uint32_t distan2; + bool tooLong; }; #endif \ No newline at end of file