Запуск в цикле или один раз в соответствии с положением ползункового переключателя

switch loop

У меня вопрос.

Я сделал систему, которая включает в себя сервопривод, шаговый двигатель и моторчик дворников :) У всех этих частей есть одна работа, и я могу ее закодировать. Но, я хочу сделать 2 режима в этой системе Single Operation, Loop operation.

Например, позиция 1-одинарная работа, 2-контурная работа. Я могу закодировать операцию цикла благодаря синтаксису arduino :)

Но я не могу закодировать один. Я могу прочитать определение состояния переключателя. Я хочу делать то же самое, но только один раз, когда ползунковый переключатель находится в положении.

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

, 👍0


1 ответ


3

Предположим, что переключатель находится на контакте 9, что функция pinMode() уже установлена и что переключатель находится в состоянии HIGH для работы в цикле.

#define MODE_SWITCH  9
#define DO_LOOP  HIGH

// Этот цикл будет выполняться один раз, если переключатель режимов выключен или
// будет выполняться непрерывно, если переключатель режима включен:
do {
  servo_things();
  stepper_things();
  motor_things();
} while( digitalRead(MODE_SWITCH) == DO_LOOP );

в C/C++ циклы do-while всегда выполняются хотя бы один раз, поскольку условие не проверяется до первого прохождения цикла. Если условие "пока" выполнено (или TRUE), цикл будет выполнен снова, в противном случае цикл завершится.

,

Я думаю, вам следует выполнить digitalRead() внутри условия while. Я думаю, вы имели в виду это и только написали это упрощенно, но, поскольку это не написано в псевдокоде, другие могут скопировать код напрямую, что означает сравнение 9 с 1, что всегда неверно., @chrisl

Хороший улов, @chrisl - это было совершенно верно. Спасибо. Исправлено сейчас., @JRobert

Я попробую это. Благодаря вам, @can