2016-02-03 2 views
1

Я познакомился с этим ультразвуковым детектором с простым кодом. Все, что я искал, - это выход (мой светодиод), который загорается всякий раз, когда детектор воспринимает объект в пределах нескольких сантиметров. Однако светодиод остается гореть, и последовательный монитор просто продолжает выплевывать значение «0.00 см»Arduino HC-SR04 Код NewPing не работает

Я буду признателен за любую помощь, спасибо.

(я извиняюсь, если есть очень простая ошибка, я проглядели)

#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); 
} 

ответ

1

Пару вещей, чтобы попробовать:

Изменение серийного печати для отображения «Продолжительность», чтобы увидеть, если проблема заключается в сантиметровом преобразовании.

Если это не проблема:

(Предполагая, что вы используете библиотеку NewPing 1.7, как найдено here.)

Библиотека 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. 

Вам не нужно затем установить контакты триггера и эхо как выходы в вашей установке.

В вашем основном цикле, использовать эти методы, чтобы получить время и расстояние в microsecs и сантиметрах:

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

Я надеюсь, что это помогает.

+0

Это дало мне номера! Но теперь он только колеблется около 180, а иногда и до 178. Это ничуть не вызвано сильным размахиванием вокруг датчика. – SirBuncey

+0

Хорошо! Это так, если вы не используете встроенные преобразования? Раньше у меня были проблемы с преобразованиями cm. Посмотрите, не помогает ли использование convert_cm или меняет MAX_DISTANCE. –

+0

Пожалуйста, имейте в виду, что точность гидролокатора не идеальна. Попытайтесь держать более крупный, более устойчивый объект на разных расстояниях. Я считаю, что кусок белой бумаги формата A4 лучше всего работает. –