Проблема с HC-SR04

pixelranger
Offline
Зарегистрирован: 25.07.2012

Использовал скетч из примера:

int inputPin=4; // Echo

int outputPin=5; // Trig

void setup()

{

  Serial.begin(9600);

  pinMode(inputPin, INPUT);

  pinMode(outputPin, OUTPUT);

}

void loop()

{

  digitalWrite(outputPin, LOW);

  delayMicroseconds(2);

  digitalWrite(outputPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(outputPin, LOW);

  int distance = pulseIn(inputPin, HIGH);

  distance= distance/58;

  Serial.print(distance);

  Serial.println(" ");

  delay(500);

}

Проблема в том что он мне постоянно выдает до 10 см, уменьшив значение delay(500); будет буолее менне правильно считать, до 3 метров, но проскакивают хначения в 5 см. например 154 152 151 5 5 5 145 и т.д.

Вот не пойму сломан или что-то не так делаю?

leshak
Offline
Зарегистрирован: 29.09.2011

Можно предположить две причины (причем взаимоисключащие ;) :

1. На малых дистанциях начинает терять "начало эхо". То есть ответ начинает приходить пока оно еще стоит на строке 27.

2. Наоборот. Он "слышит" сам себя. Работу излучателья воспринимает как "эхо". Тогда в строку 30-ть нужно воткнуть какую-то маленькую задержечку.

Но я-бы попробовал не "ковырятся с этим" (переходить на таймеры и прерывания), а попробовать нагуглить стандартную библиотеку для работы с ним. Кажись она называется Ultrasonic . Возможно в ней все уже реализованно "по грамотному".