Мотор с ультразвуковым датчиком

programming motor ultrasonics

Я новичок в программировании, так что терпите меня. Я пишу простой код для управления двигателем таким образом, чтобы двигатель вращался на полной скорости до тех пор, пока датчик не обнаружит объект в пределах 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.

Определенно, этому моему старому мозгу нужно учиться!

, 👍1

Обсуждение

Вы пытались скомпилировать свой код?, @jsotola

начните думать об утверждениях если в вашей повседневной жизни... они случаются все время... например, если (красный свет) {остановить машину};... затем подумайте, будет ли блок else .... не забывайте, что вы можете поместить любую команду в блок else ... else if полезно, @jsotola


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