Проблема с кодированием Arduino
Я управляю водяным насосом, основываясь на показаниях ультразвука. Как только ультразвуковой датчик покажет > 10 см, я хочу, чтобы водяной насос запускался до тех пор, пока датчик не покажет < 5 см. Не могли бы вы помочь мне настроить следующий код в соответствии с моими требованиями.
void loop(){
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
duration=pulseIn(echoPin,HIGH);
distance=(duration*0.034/2);
if(distance>5){
digitalWrite(motor,HIGH);
delay(30000);
digitalWrite(motor,LOW);
} else {
digitalWrite(motor,LOW);
}
}
@motion channel, 👍0
1 ответ
Лучший ответ:
Итак, вы спрашиваете:
- Если расстояние больше 10:
- Включить
- Если расстояние меньше 5:
- Отключить
Это несложно написать, поскольку у вас уже есть оператор "if" там, что сравнивает расстояние.
if(distance>5){
digitalWrite(motor,HIGH);
delay(30000);
digitalWrite(motor,LOW);
} else {
digitalWrite(motor,LOW);
}
становится:
if (distance > 10) {
digitalWrite(motor, HIGH);
}
if (distance < 5) {
digitalWrite(motor, LOW);
}
Видите, какая прямая корреляция 1:1 между английским кодом, который я написал вверху, и кодом под ним? Часто это хороший способ понять код: напишите его на простом английском шаг за шагом, что вы хотите и какие решения вам нужно принять, а затем обычно происходит простое преобразование английского языка в код.
Самая сложная часть обучения программированию — это понимание логики. Сделайте это сначала на английском языке, и написание самого кода станет намного проще.
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
- Код для 2 ультразвуковых датчиков
- Сдвиг уровня 5В <-> 3,3В
- Подключение нескольких ультразвуковых датчиков (hc-sr04) к одной плате arduino.(мега)
- Как далеко может стоять HC-SR04 от микроконтроллера?
- Как использовать датчик HC-SR04 для изготовления расходомера?
- Ультразвуковой датчик (HC-SR04), регистрирующий случайное расстояние
- Как управлять двумя шаговыми двигателями и использовать ультразвуковой датчик вместе?
Спасибо. Две точки, используя приведенный выше код, если расстояние < 10, двигатель не будет работать. Я попытался добавить digitalWrite(motor, HIGH); перед оператором if, но я еще не проверял его. Во-вторых, двигатель продолжает работать в повторяющихся циклах, я считаю, что каждый раз циклы кода. это здорово?, @motion channel
Если расстояние < 10, то двигатель не должен работать. Вы не указали, что так и должно быть. Вы хотите, чтобы он был включен для расстояния> 10, а не < 10. Если он включается и выключается, значит, расстояние неоднократно меняется от более 10 до менее 5., @Majenko
С кодом Маженко двигатель не включится, пока расстояние не станет > 10. Затем он **останется** включенным, пока расстояние не упадет до < 5. Это то, что вы хотели., @Duncan C
Вы также можете добавить максимальное значение времени, чтобы в случае отказа ультразвукового датчика при включенной помпе у него был верхний предел продолжительности работы помпы. Это потребует записи значения
millis()
в тот момент, когда вы включаете насос, и выключения его, если двигатель включен, а текущее значениеmillis()
достаточно далеко в прошлом., @Duncan C@motionchannel: Для справки, поведение, описанное в вашей прозе и реализованное в коде Маженко, называется _гистерезисным управлением_. В пределах полосы гистерезиса (5 – 10 см) насос должен оставаться в том состоянии, которое было установлено ранее. Гистерезис — очень разумный способ избежать быстрого включения и выключения двигателя. См., например, Википедию: [Гистерезис в технике] (https://en.wikipedia.org/wiki/Hysteresis#In_engineering)., @Edgar Bonet