割り込みを利用して超音波測距センサーをバックグラウンドで計測し続けられます。
Dependents: escapeFromYou Sample_LinetraceWithSonicDist
Diff: SonicDist.cpp
- Revision:
- 7:4a171a80f085
- Parent:
- 6:ba801e0b68df
- Child:
- 8:8bb311d39a99
--- a/SonicDist.cpp Sun Aug 07 18:26:25 2016 +0000 +++ b/SonicDist.cpp Sat Oct 08 22:15:39 2016 +0000 @@ -13,12 +13,14 @@ } void SonicDist::StartMeasure(void) { - echotime.reset(); - echotime.start(); + if(startflag) { + echotime.reset(); + echotime.start(); + } } void SonicDist::endMeasure(void) { - if(dist!=-1) { + if(dist!=-1&& startflag) { echotime.stop(); dist=echotime.read()*soundspeed*1000/2;//mmで出力 startflag=false; @@ -26,7 +28,7 @@ } void SonicDist::setTrig(void) { - if(startflag)SonicDist::endMeasure(); + if(startflag)dist=3000; startflag=true; trig->write(0); systime.attach(this,&SonicDist::releaseTrig, 0.000010); @@ -37,18 +39,21 @@ } double SonicDist::read(void) { - if(dist<0)SonicDist::takeDist(); - return (double)dist/10; + return SonicDist::read_mm()/10; } double SonicDist::read_mm(void) { - if(dist<0)SonicDist::takeDist(); + if(dist<0) { + SonicDist::takeDist(); + wait(0.03); + } return dist; } double SonicDist::takeDist(void) { - if(dist<0)pulse.attach(this,&SonicDist::setTrig, 0.3); - dist=-2; - while(dist<0) {printf("");} + if(dist==-1) { + pulse.attach(this,&SonicDist::setTrig,0.05); + dist=-2; + } return (double)dist/10; } \ No newline at end of file