Мотор с ультразвуковым датчиком
Я новичок в программировании, так что терпите меня. Я пишу простой код для управления двигателем таким образом, чтобы двигатель вращался на полной скорости до тех пор, пока датчик не обнаружит объект в пределах 5 дюймов. датчика. Если он увидит что-то на расстоянии 5 дюймов или меньше, я хочу, чтобы двигатель остановился. У меня такой вопрос: при использовании оператора IF обязательно ли наличие ELSE или можно просто выполнить два оператора IF без ELSE?
Вот мой пример:
int motorpin1 = 10 , motorpin2 = 11;
int trig = 12;
int echo = 9;
float distance;
float time;
void setup()
{
pinMode (motorpin1, OUTPUT);
//желтый провод
pinMode (motorpin2, OUTPUT);
//синий провод
pinMode (trig, OUTPUT);
pinMode (echo, INPUT);
Serial.begin (9600);
}
void loop()
{
// настраиваем ультразвуковой датчик для управления
//двигатель
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
time = pulseIn(echo, HIGH);
distance = time/148.1;
Serial.println(distance);
if distance <5,digitalWrite (motorpin1, LOW);
digitalWrite (motorpin2, LOW);
if distance >=5, digitalWrite (motorpin1, HIGH);
digitalWrite (motorpin2, LOW);
delay (1000); // ждем 1 секунду
Есть ли лучший способ сделать это с помощью оператора ELSE? Я хочу зафиксировать параметр, в котором код управляет конкретными параметрами >5, а затем <or=5. Кроме того, в следующий раз я сделаю паузу и реверсирую двигатель, если через 1 секунду датчик все еще видит объект <=5.
Определенно, этому моему старому мозгу нужно учиться!
@Pilot Ken, 👍1
Обсуждение1 ответ
Вы можете сделать что-то вроде
if (distance < 5) {
digitalWrite (motorpin1, LOW);
}
else {
digitalWrite (motorpin1, HIGH);
}
Похоже, вы установили motorpin2 только в LOW и никогда не установили в HIGH. Если вы не хотите устанавливать значение HIGH, переместите эту строку в раздел setup(). Нет необходимости постоянно устанавливать его LOW.
вы можете использовать тернарный оператор С++... заменить шесть строк одной строкой... digitalWrite (motorpin1, (distance < 5)? LOW: HIGH);, @jsotola
@jsotola Что ж, если вы хотите пойти по этому пути, тернарный оператор сам по себе не нужен: digitalWrite (motorpin1, !(distance < 5)); или просто digitalWrite (motorpin1, Distance >= 5));, @timemage
это зависит от того, равен ли «HIGH» «true» и «LOW» равен «false», @jsotola
Вы можете использовать тернарный оператор, и я делаю это сам, но, поскольку вопрос задает новичок, я предпочел читабельность сокращению количества строк., @jkp
@jsotola, что-то рассмотрел и отбросил. Никто в здравом уме не будет проектировать ядро с НИЗКИМ, как правдивое, и наоборот. Во всяком случае, особенно для новых людей, это нормально, как есть., @timemage
- Обратное вращение шагового двигателя
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Двигатель постоянного тока шумит, но не вращается
- Почему сервопривод вращается на 360 градусов?
- Есть ли лучший выбор, кроме использования delay() для 6-часовой задержки?
- Тахометр на базе Леонардо?
- Мой моторный щит сломан?
- Как повторить код
Вы пытались скомпилировать свой код?, @jsotola
начните думать об утверждениях
еслив вашей повседневной жизни... они случаются все время... например,если (красный свет) {остановить машину};... затем подумайте, будет ли блокelse.... не забывайте, что вы можете поместить любую команду в блокelse...else ifполезно, @jsotola