Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: escapeFromYou Sample_LinetraceWithSonicDist
Revision 8:8bb311d39a99, committed 2017-03-02
- Comitter:
- natuga117
- Date:
- Thu Mar 02 18:01:45 2017 +0000
- Parent:
- 7:4a171a80f085
- Commit message:
- improved precision
Changed in this revision
| SonicDist.cpp | Show annotated file Show diff for this revision Revisions of this file |
| SonicDist.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/SonicDist.cpp Sat Oct 08 22:15:39 2016 +0000
+++ b/SonicDist.cpp Thu Mar 02 18:01:45 2017 +0000
@@ -6,6 +6,7 @@
echo=new InterruptIn(Echo);
soundspeed=340;
startflag=false;
+ NoiseCheckFlag=false;
dist=-1;//まだ未測定時かどうかの判定用にdistはありえない値(負の値を代入しておく)
trig->write(1);
echo->rise( this, &SonicDist::StartMeasure );
@@ -13,29 +14,38 @@
}
void SonicDist::StartMeasure(void)
{
- if(startflag) {
+ if(startflag && NoiseCheckFlag==false) {
echotime.reset();
- echotime.start();
+ }else{
+ Postponement.detach();
}
}
void SonicDist::endMeasure(void)
{
if(dist!=-1&& startflag) {
- echotime.stop();
- dist=echotime.read()*soundspeed*1000/2;//mmで出力
+ distbuf=echotime.read()*soundspeed*1000/2;//mmで出力
+ if(distbuf<10){distbuf=dist;}//立ち上がりノイズと判定
startflag=false;
+ NoiseCheckFlag=true;
+ Postponement.attach(this,&SonicDist::FallNoiseCheck,0.04);
}
}
+
+void SonicDist::FallNoiseCheck(void)//ここに到達すると立下りのノイズではないと判定される
+{
+ dist=distbuf;
+ NoiseCheckFlag=false;
+}
+void SonicDist::Init(void)
+{
+ echotime.start();
+ pulse.attach(this,&SonicDist::setTrig,0.05);
+ dist=-2;
+}
void SonicDist::setTrig(void)
{
- if(startflag)dist=3000;
startflag=true;
- trig->write(0);
- systime.attach(this,&SonicDist::releaseTrig, 0.000010);
-}
-void SonicDist::releaseTrig(void)
-{
- trig->write(1);
+ trig->write(!trig->read());
}
double SonicDist::read(void)
{
@@ -52,8 +62,7 @@
double SonicDist::takeDist(void)
{
if(dist==-1) {
- pulse.attach(this,&SonicDist::setTrig,0.05);
- dist=-2;
+ SonicDist::Init();
}
return (double)dist/10;
}
\ No newline at end of file
--- a/SonicDist.h Sat Oct 08 22:15:39 2016 +0000
+++ b/SonicDist.h Thu Mar 02 18:01:45 2017 +0000
@@ -11,18 +11,22 @@
double read(void);
double read_mm(void);
double takeDist(void);
+ void Init(void);
private:
void releaseTrig(void);
void setTrig(void);
void endMeasure(void);
+ void FallNoiseCheck(void);//立ち下がりノイズの判定
void StartMeasure(void);
double soundspeed;//音速
bool startflag;
- Timeout systime;
Ticker pulse;
+ Timeout Postponement;//ノイズ判定を行うための割り込み
DigitalOut* trig;
InterruptIn* echo;
Timer echotime;
+ int distbuf;//仮格納距離(mm)
+ bool NoiseCheckFlag;//ノイズチェックが終了しているかの判定用
int dist;//距離(mm)
};
#endif