Arduino Автономная машина если постановка (ультразвуковая) - PullRequest
0 голосов
/ 12 декабря 2018

Я столкнулся с проблемой при создании операторов if для автономного автомобиля.Машина пропускает большую часть утверждений if и немедленно переходит к утверждению else.Датчики дают правильные значения.Это потому, что я использую операторы «else if» или что-то еще?Предполагается, что машина реагирует на окружающую обстановку, поэтому я должен был сделать много заявлений, насколько это возможно.Но вместо этого он просто делает последний бит, когда идет назад, ждет, идет назад влево и назад вправо.Поэтому мой вопрос заключается в том, нужно ли мне добавлять дополнительные операторы if, чтобы они лучше реагировали на свое окружение или есть что-то еще?Вот код операторов if:

  if (sensors[0] >= 50 ) { //if the distance of the front sensor is greater than 50cm, than set Fwd true. Otherwise its false.
    Fwd = true;
  } else {
    Fwd = false;
  }
  delay(50);
  if ((Fwd == true) && (sensors[1] > 50) && (sensors[2] > 50)) {
    fwd();
  } else if ((Fwd == true) && (sensors[1] < 50)) {
    fwdRight();
  } else if ((Fwd == true) && (sensors[2] < 50)) {
    fwdLeft();
  } else if ((Fwd == false) && (sensors[1] < 50) && (sensors[2] < 50)) {
    Stp();
  } else if ((Fwd == false) && (sensors[1] < 50)) {
    bwdRight();
  } else if ((Fwd == false) && sensors[2] < 50) {
    bwdRight();
  } else {
    Stp();
    delay(1000);
    bwd();
    delay(500);
    bwdLeft();
    delay(500);
    bwdRight();
  }

1 Ответ

0 голосов
/ 12 декабря 2018

Начните с наведения порядка в вашем коде, и может быть очевидно, где что-то идет не так.Например, вы вызываете несколько проверок на Fwd, выполняя:

if ((Fwd == true) && ... ) {
    ...
} else if ((Fwd == true) && ... ) {
    ...
} else if ((Fwd == true) && ... ) {
    ... 
} else if ((Fwd == false) && ... ) {
    ...
} else if ((Fwd == false) && ... ) {
    ...
}

Это использует ценные ресурсы в памяти вашей программы.Было бы гораздо эффективнее выполнить одну проверку и оценить ее оттуда:

if (Fwd){
    // Check sensor conditions here
} else {
    // Check more sensor conditions here
}

На самом деле, вы, вероятно, могли бы вообще пропустить переменную Fwd (если вы не используете ее в другом месте), спасая васбольше места в памяти:

// Check whether to go forward or backwards.
// >= 50 - forward
// <  50 - backward
if (sensors[0] >= 50) {
    // Check sensor conditions here 
} else {
    // Check more sensor conditions here
}

В целом, вы можете получить что-то вроде:

// Check whether to go forward or backwards.
// >= 50 - forward
// <  50 - backward
if (sensors[0] >= 50) {
    // Going forward, but which direction?
    if (sensors[1] < 50) {
        fwdRight();
    } else if (sensors[2] < 50) {
        fwdLeft();
    } else {
        // sensors[1] >= 50 AND sensors[2] >= 50
        // Going straight forward
        fwd();
    }
} else {
    // Check backward sensor conditions here
}

Этот ответ может не отвечать непосредственно на ваш вопрос, но он должен помочь вам лучше диагностировать то, чтопродолжается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...