Проблемы с датчиком расстояния HC-SR04

Всем привет! Подключил датчик расстояния, а он выдаёт только самое первое значение, затем идут нули (0). Подключено правильно (иначе при запуске программы не срабатывало бы)

int echopin = 9; //приём
int trigpin = 8; //передача
int duration, cm; //длительность импульса и расстояние
#define RED 7
#define YELLOW 6
#define BLUE 5

 void setup (){
   pinMode (RED, OUTPUT);
   pinMode (YELLOW, OUTPUT);
   pinMode (BLUE, OUTPUT);
   Serial.begin (9600);
   Serial.println ("Hello");
     }
 void loop () {
   pinMode (trigpin, OUTPUT);
   digitalWrite (trigpin, HIGH);
   pinMode (echopin, INPUT);
   duration = pulseIn (echopin, HIGH);
   cm = duration/58;
   Serial.print (cm); // после старта выводит одно расстояние, затем "0"
   Serial.println (" cm"); // выводит всегда

 if (cm < 80) {digitalWrite(RED,HIGH);digitalWrite(YELLOW,LOW); digitalWrite(BLUE,LOW);} // и лампочки тоже не горят
 if (cm > 80 && cm < 150) {digitalWrite(RED,LOW);digitalWrite(YELLOW,HIGH); digitalWrite(BLUE,LOW);}
 if (cm > 150) {digitalWrite(RED,LOW);digitalWrite(YELLOW,LOW); digitalWrite(BLUE,HIGH);}
 
   }

измените вставку кода, там нужен обратный апостроф, который на букве “ё” живёт

1 лайк

готово, видно?

Да,!

Вообще-о с этим датчиком не так работают. Вы половины не делаете, что нужно. Посмотрите вот здесь и можете код прямо оттуда и взять.

Просто странно, что в эмуляторе работает (tinkercad). Схема та же

Ничего странного. Либо эмулятор дрянь, либо у Вас в эмуляторе и в устройстве разный код. То, что Вы привели, работать не может.

Просто попробуйте код из этой инструкции и отпишитесь, что получилось. Если при этом останутся проблемы, выкладывайте Ваш свежий код (что-то же Вы будете менять, хоть пины - так что Ваш выкладывайте).

Спасибо! Действительно, немного не так, но покопавшись, разобрался. Единственно, что не понял, откуда 38000 в длительности идёт. Как понял, это предел ожидания сигнала для прибора. И, кстати, нашёл вроде нормальный эмулятор, вот ссылка с моим проектом: Ultrasonic - Wokwi Arduino and ESP32 Simulator

int trig=9;
int echo=8;
int duration;
float distance;
float meter; 
#define RED 7
#define YELLOW 6
#define BLUE 5

 void setup (){
  pinMode (RED, OUTPUT);
  pinMode (YELLOW, OUTPUT);
  pinMode (BLUE, OUTPUT);
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  pinMode(echo, INPUT);
  delay(6000);
  Serial.println("Distance:");

     }
 void loop () {
digitalWrite(trig, HIGH);
 delayMicroseconds(10);
 digitalWrite(trig, LOW);
 duration = pulseIn(echo, HIGH);
 if(duration>=38000){
 Serial.print("Out range");
 }
 else{
 distance = duration/58;
 Serial.print(distance);
 Serial.print("cm");
 meter=distance/100;
 Serial.print("\t");
 Serial.print(meter);
 Serial.println("m");
 }
 delay(500); 

 if (distance < 80) {digitalWrite(RED,HIGH);digitalWrite(YELLOW,LOW); digitalWrite(BLUE,LOW);} 
 if (distance > 80 && distance < 150) {digitalWrite(RED,LOW);digitalWrite(YELLOW,HIGH); digitalWrite(BLUE,LOW);}
 if (distance > 150) {digitalWrite(RED,LOW);digitalWrite(YELLOW,LOW); digitalWrite(BLUE,HIGH);}
 
   }