Ошибка в программе, измеряющей расстояние от ультразвукового датчика
Я пытаюсь использовать ультразвуковой датчик в сочетании с различными устройствами, такими как датчик приближения, соленоид и сигнализация.
Вот как должен работать проект:
Контейнер помещается на приспособление, и датчик приближения определяет размещение контейнера. Как только контейнер обнаружен, необходимо активировать ультразвуковой датчик, измерить время импульса и рассчитать расстояние. Контейнер имеет уникальные особенности с каждой стороны, и цель ультразвукового датчика состоит в том, чтобы измерить расстояние, и если значение расстояния находится в пределах требуемой спецификации, то он должен включить соленоид, чтобы разрешить следующую операцию, или если он находится за пределами спецификации, он должен поднять тревогу.
ниже приведен код:
/*Цель данного проекта
1. Уметь определять, когда контейнер помещается в неправильное положение, и при этом отключать подачу в пневматическую систему.
Для этого мы будем использовать следующие устройства
1. Ультразвуковой датчик для измерения разности расстояний с обеих сторон контейнера
2. ИК-датчик для измерения того, был ли установлен конатинер или нет (этот датчик активирует ультразвуковой датчик).
3. Soliend, который будет управляться выходом ультразвукового датчика. Соленоид будет контролировать поток воздуха.
*/
int trigPin = 7;
int echoPin = 8;
int contSig = 2;
int solSig = 12;
int errSig = 13;
void setup() {
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(contSig,INPUT_PULLUP);
pinMode(echoPin,INPUT);
pinMode(solSig,OUTPUT);
pinMode(errSig,OUTPUT);
}
void loop() {
if (digitalRead(contSig) == 0){
Serial.println(digitalRead(contSig));
digitalWrite(trigPin,LOW);
delayMicroseconds(10);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
int duration = pulseIn(echoPin,HIGH);
Serial.println(duration);
float dist = (duration/2) * 0.034;
Serial.println(dist);
if (dist >=20 && dist <= 60){
digitalWrite(solSig,HIGH);
digitalWrite(errSig,LOW);
}
else{
digitalWrite(solSig,LOW);
digitalWrite(errSig,HIGH);
}
}
}
У меня есть несколько проблем.
1.Первый оператор If в самом начале, похоже, не работает должным образом.
2.Выходные данные на последовательном мониторе чередуются между нулями и фактическими значениями. Я не знаю точно, почему этот набор нулей продолжает появляться между ними, но это приведет к провалу проекта.
Ниже приведен вывод с последовательного монитора:
0
0
0.00
0
2892
49.16
0
- (Код ультразвукового датчика: такого файла или каталога нет)
- Команда strtok() с Serial связью
- Несколько неблокирующих таймеров обратного отсчета?
- Датчик HC-SR505 PIR выдает только HIGH уровень
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Отправка данных из ESP8266 в PHP
- Определение уровня заряда с помощью датчика тока (ACS758) с arduino uno
- Использование YS-IRTM с Arduino Uno
pulseIn
возвращает ноль, если в течение периода ожидания по умолчанию импульс не обнаружен. Другие нули-это те, которые вы печатаете явно., @Majenko"Первое утверждение "Если" в начале, кажется, не работает должным образом", Почему вы так говорите?, @timemage
Я смоделировал эту программу на tinker cad, я не понимаю, почему нули все еще появляются. Согласно логике, у нас не должно быть нулей. Состояние if, похоже, не работает, потому что, когда я меняю значение contSig с 0 на 1, я все равно получаю показания ультразвукового датчика, чего не должно происходить, @Hussain Bhavnagarwala