Всем привет! Подключил датчик расстояния, а он выдаёт только самое первое значение, затем идут нули (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). Схема та же
             
            
              
            
           
          
            
            
              
Ничего странного. Либо эмулятор дрянь, либо у Вас в эмуляторе и в устройстве разный код. То, что Вы привели, работать не может.
             
            
              
            
           
          
            
            
              
 Olarick:
 
Просто странно,
 
 
Просто попробуйте код из этой инструкции и отпишитесь, что получилось. Если при этом останутся проблемы, выкладывайте Ваш свежий код (что-то же Вы будете менять, хоть пины - так что Ваш выкладывайте).
             
            
              
            
           
          
            
            
              Спасибо! Действительно, немного не так, но покопавшись, разобрался. Единственно, что не понял, откуда 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);}
 
   }