割り込みを利用して超音波測距センサーをバックグラウンドで計測し続けられます。

Dependents:   escapeFromYou Sample_LinetraceWithSonicDist

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