1

簡単なコードでこの超音波検出器を知るようになりました。私が探していたのは、検出器が非常に数センチ以内の物体を感知したときに点灯する出力 (私の LED) だけでした。ただし、LED は点灯したままで、シリアル モニタは値「0.00cm」を吐き出し続けます。

助けていただければ幸いです、ありがとう。

(私が見落とした非常に単純なエラーがある場合は申し訳ありません)

#include <NewPing.h>

int TriggerPIN = 2;
int EchoPIN = 3;
int LEDPIN = 7;

void setup() 
{
Serial.begin(9600);
//That started the distance monitor
pinMode(LEDPIN, OUTPUT);
pinMode(TriggerPIN, OUTPUT);
pinMode(EchoPIN, INPUT);
}

void loop() 
{
float Distance, Duration;
digitalWrite(TriggerPIN, LOW);//These three blink the distance LED
delayMicroseconds(2);
digitalWrite(TriggerPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TriggerPIN, LOW);

Duration = pulseIn(EchoPIN, HIGH); //Listening and waiting for wave
Distance = (Duration*0.034/2);//Converting the reported number to CM

if (Distance > 50)
  {
  digitalWrite(LEDPIN,LOW);
  }
else
  {
  digitalWrite(LEDPIN,HIGH);
  }
Serial.print(Distance);Serial.print("cm");
Serial.println(" ");
delay(200);
}
4

1 に答える 1

1

試してみるいくつかのこと:

シリアル プリントを変更して「期間」を表示し、問題がセンチメートルの変換にあるかどうかを確認します。

これが問題でない場合:

(ここにあるように、NewPing 1.7 ライブラリを使用していると仮定します )

NewPing ライブラリには、距離変換とともに「Ping」機能が組み込まれています。コードの先頭を次のように置き換えてみてください。

#include <NewPing.h>
#define TRIGGER_PIN  2
#define ECHO_PIN     3
#define MAX_DISTANCE 200 // Maximum distance to ping for (cm). Up to ~450cm

 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

その後、セットアップでトリガーおよびエコー ピンを出力として設定する必要はありません。

メイン ループで、これらのメソッドを使用して、時間と距離をマイクロ秒とセンチメートルで取得します。

 unsigned int pingTime = sonar.ping(); //Gets the ping time in microseconds.
 Serial.print(sonar.convert_cm(pingTime)); // Convert ping time in cm, serial out.

これが役立つことを願っています。

于 2016-02-03T20:25:39.273 に答える