Как выполнить операцию один раз до достижения условия, а затем перезапустить ее с начала

Я делаю проект, используя ИК-датчик, серводвигатель и кнопку. Я не могу написать код для указанной логики: он выполнит операцию, когда он считывает цифровое значение высокого уровня IR и вращает серводвигатель до порогового значения, а затем вращает сервопривод в обратном направлении с помощью кнопки. Он не будет выполнять никаких действий до тех пор, пока не будет использована кнопка, хотя IR-датчик считывает значение. Затем он снова выполнит то же действие после нажатия кнопки.

, 👍2

Обсуждение

«Я не умею писать код логики» — итак, вы хотите, чтобы кто-то сделал это за вас бесплатно? Звучит справедливо, @Jaromanda X

логика как заявлено....вы не четко сформулировали желаемое поведение, @jsotola


1 ответ


Лучший ответ:

1

Я предлагаю, даже если это кажется простым примером, начать с анализа того, чего вы действительно хотите достичь. В этом примере я бы попытался начать с диаграммы состояний. Благодаря этому вы можете прояснить простые вопросы, например, что произойдет, если IR упадет на низкий уровень во время вращения двигателя. В моем проекте двигатель продолжал бы работать, но, возможно, IR используется из соображений безопасности, и вы хотите остановить двигатель, если что-то приблизится. Если это ваше намерение, вы можете легко добавить дополнительные переходы во все состояния, чтобы вернуться в состояние 00.

Такой подход помогает создавать код, который легко поддерживать и изменять в соответствии с новыми требованиями

После того, как диаграмма состояний готова, зачастую легко приступить к программированию со структурами переключателей/кейсов для получения первого опыта обучения.

Switch(state) {
  case 00:
  // если IR set state = 10;
  break;
  case 10:
  // если кнопка была нажата, устанавливаем состояние = 11
  break;
  case 11:
  // включаем двигатель
  // если пороговое состояние установлено = 12
  break;
.
.
.

}
,