1 sensor using RTOS Timer, another 2 over RTOS Semaphore

Dependents:   Autonomous_quadcopter

Fork of HCSR04 by Antoniolinux B.

Committer:
edy05
Date:
Tue May 22 19:35:58 2018 +0000
Revision:
13:e9b99635aa2d
Parent:
12:6f6469b2f016
Final updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
antoniolinux 0:86b2086be101 1 #include "hcsr04.h"
edy05 5:02948ae78be7 2 #include "definitions.h"
antoniolinux 0:86b2086be101 3 #include "mbed.h"
edy05 1:53657de3246f 4 #include "rtos.h"
antoniolinux 0:86b2086be101 5 /*
antoniolinux 0:86b2086be101 6 *HCSR04.cpp
antoniolinux 0:86b2086be101 7 */
edy05 12:6f6469b2f016 8 HCSR04::HCSR04(PinName t1, PinName e1) : trig1(t1), echo1(e1){
edy05 7:dcf0aa89bcd7 9
edy05 8:0a10bacaf501 10 int rate = (1.0 / FLIGHT_CONTROLLER_FREQUENCY) * 1000; //ms
edy05 7:dcf0aa89bcd7 11
edy05 7:dcf0aa89bcd7 12 limit = (rate * 1000 - rate * 200);
edy05 7:dcf0aa89bcd7 13
edy05 7:dcf0aa89bcd7 14 threadUpdateTimer1 = new RtosTimer(threadWorker1, osTimerPeriodic, this);
edy05 7:dcf0aa89bcd7 15 threadUpdateTimer1->start(rate);
edy05 7:dcf0aa89bcd7 16
edy05 13:e9b99635aa2d 17 id = Thread::gettid();
edy05 13:e9b99635aa2d 18 printf("down sonic gettid 0x%08X \n\r", id);
edy05 13:e9b99635aa2d 19
edy05 7:dcf0aa89bcd7 20 //threadUpdateTimer2 = new RtosTimer(threadWorker2, osTimerPeriodic, this);
edy05 7:dcf0aa89bcd7 21 //threadUpdateTimer2->start(rate);
edy05 1:53657de3246f 22 }
edy05 1:53657de3246f 23
edy05 7:dcf0aa89bcd7 24 void HCSR04::threadWorker1(void const *p)
edy05 1:53657de3246f 25 {
edy05 1:53657de3246f 26 HCSR04* self = (HCSR04*)p;
edy05 1:53657de3246f 27
edy05 7:dcf0aa89bcd7 28 //printf("start\n\r");
edy05 7:dcf0aa89bcd7 29 self->trig1=1; // trigger high
edy05 7:dcf0aa89bcd7 30 //printf("trig\n\r");
edy05 1:53657de3246f 31 wait_us(10);
edy05 7:dcf0aa89bcd7 32 //printf("wait\n\r");
edy05 7:dcf0aa89bcd7 33 self->trig1=0; // trigger low
edy05 3:81512ca9a13c 34 // start pulseIN
edy05 8:0a10bacaf501 35 self->timerLimit.reset();
edy05 8:0a10bacaf501 36 self->timerLimit.start();
edy05 7:dcf0aa89bcd7 37 while(!self->echo1){
edy05 8:0a10bacaf501 38 if(self->timerLimit.read_us() > self->limit){
edy05 3:81512ca9a13c 39 //printf("moc1\n\r");
edy05 7:dcf0aa89bcd7 40 break;
edy05 3:81512ca9a13c 41 }
edy05 3:81512ca9a13c 42 }
edy05 8:0a10bacaf501 43 if(self->timerLimit.read_us() < self->limit){
edy05 8:0a10bacaf501 44 //self->timer1.stop();
edy05 7:dcf0aa89bcd7 45 self->timer1.reset(); //reset timer
edy05 7:dcf0aa89bcd7 46 self->timer1.start();
edy05 7:dcf0aa89bcd7 47 while(self->echo1){
edy05 8:0a10bacaf501 48 if(self->timerLimit.read_us() > self->limit){
edy05 3:81512ca9a13c 49 //printf("moc2\n\r");
edy05 7:dcf0aa89bcd7 50 break;
edy05 3:81512ca9a13c 51 }
edy05 3:81512ca9a13c 52 }
edy05 7:dcf0aa89bcd7 53 self->timer1.stop();
edy05 7:dcf0aa89bcd7 54 self->distan1 = self->timer1.read_us() / 58;
edy05 7:dcf0aa89bcd7 55 }
edy05 7:dcf0aa89bcd7 56 //printf("end\n\r");
edy05 7:dcf0aa89bcd7 57 }
edy05 7:dcf0aa89bcd7 58
edy05 1:53657de3246f 59
edy05 11:49a0feca5d71 60 float HCSR04::getDistan1(){
edy05 7:dcf0aa89bcd7 61 return distan1;
edy05 7:dcf0aa89bcd7 62 }
edy05 7:dcf0aa89bcd7 63
antoniolinux 0:86b2086be101 64