Всем привет! Подключил датчик расстояния, а он выдаёт только самое первое значение, затем идут нули (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);}
}