1 sensor using RTOS Timer, another 2 over RTOS Semaphore

Dependents:   Autonomous_quadcopter

Fork of HCSR04 by Antoniolinux B.

Committer:
edy05
Date:
Sat Jan 20 11:44:21 2018 +0000
Revision:
3:81512ca9a13c
Parent:
2:8801a3da8693
Child:
4:34023f76fc4f
Child:
5:02948ae78be7
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
antoniolinux 0:86b2086be101 1 #include "hcsr04.h"
antoniolinux 0:86b2086be101 2 #include "mbed.h"
edy05 1:53657de3246f 3 #include "rtos.h"
antoniolinux 0:86b2086be101 4 /*
antoniolinux 0:86b2086be101 5 *HCSR04.cpp
antoniolinux 0:86b2086be101 6 */
edy05 1:53657de3246f 7 HCSR04::HCSR04(PinName t, PinName e) : trig(t), echo(e) {
edy05 3:81512ca9a13c 8 //thread = new Thread(threadWorker, this);
edy05 3:81512ca9a13c 9 threadUpdateTimer = new RtosTimer(threadWorker, osTimerPeriodic, this);
edy05 3:81512ca9a13c 10 threadUpdateTimer->start(5);
edy05 1:53657de3246f 11 }
edy05 1:53657de3246f 12
edy05 1:53657de3246f 13 void HCSR04::threadWorker(void const *p)
edy05 1:53657de3246f 14 {
edy05 1:53657de3246f 15 HCSR04* self = (HCSR04*)p;
edy05 1:53657de3246f 16
edy05 1:53657de3246f 17 self->trig=1; // trigger high
edy05 1:53657de3246f 18 wait_us(10);
edy05 1:53657de3246f 19 self->trig=0; // trigger low
edy05 3:81512ca9a13c 20 // start pulseIN
edy05 3:81512ca9a13c 21 self->timer.reset();
edy05 1:53657de3246f 22 self->timer.start();
edy05 3:81512ca9a13c 23 while(!self->echo){
edy05 3:81512ca9a13c 24 if(self->timer.read_us() > 4500){
edy05 3:81512ca9a13c 25 //printf("moc1\n\r");
edy05 3:81512ca9a13c 26 break;
edy05 3:81512ca9a13c 27 }
edy05 3:81512ca9a13c 28 }
edy05 3:81512ca9a13c 29 if(self->timer.read_us() < 4500){
edy05 3:81512ca9a13c 30 self->timer.stop();
edy05 3:81512ca9a13c 31 self->timer.reset(); //reset timer
edy05 3:81512ca9a13c 32 self->timer.start();
edy05 3:81512ca9a13c 33 while(self->echo){
edy05 3:81512ca9a13c 34 if(self->timer.read_us() > 4500){
edy05 3:81512ca9a13c 35 //printf("moc2\n\r");
edy05 3:81512ca9a13c 36 break;
edy05 3:81512ca9a13c 37 }
edy05 3:81512ca9a13c 38 }
edy05 3:81512ca9a13c 39 self->timer.stop();
edy05 3:81512ca9a13c 40 self->distan = self->timer.read_us() / 58;
edy05 3:81512ca9a13c 41 }
edy05 1:53657de3246f 42 }
edy05 1:53657de3246f 43
edy05 1:53657de3246f 44 uint16_t HCSR04::getDistan(){
edy05 1:53657de3246f 45 return distan;
antoniolinux 0:86b2086be101 46 }
antoniolinux 0:86b2086be101 47
antoniolinux 0:86b2086be101 48 //return distance in cm
edy05 1:53657de3246f 49 uint16_t HCSR04::getDistance(){
edy05 1:53657de3246f 50 distance_cm = distan/58;
edy05 1:53657de3246f 51 return distance_cm;
antoniolinux 0:86b2086be101 52
antoniolinux 0:86b2086be101 53 }