установка двигателя постоянного тока для работы в течение фиксированного периода времени

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

https://github.com/gabrielniculita/arduino-dc-motor.git

, 👍0


1 ответ


1

Есть две возможности:

Простой способ (но с ограничениями)

Я вижу задержку в 200 (мс)… Поэтому, если вы хотите, чтобы он работал в течение минуты, используйте 60 000.

Если 60 000 не принимается (возможно, входной аргумент представляет собой целое число со знаком, имеющее максимальное значение 32 767), используйте цикл for и сделайте задержку в секунду 60 раз.

Это решение заставит его не реагировать в течение этих 60 секунд на другую команду "влево" или "вправо".

Обновление: см. комментарий JRobert, 60 000 можно использовать без проблем.

Предотвратить задержку

Если вы хотите отреагировать на команду влево/вправо, ПОКА двигатель движется в течение этих 60 секунд, вы должны сохранить время (с миллис) в переменной и сверить со временем, чтобы знать, когда выключать двигатель.

См. команду Дункана С. Это очень похоже на скетч "Мигание без задержки", который можно найти здесь.

(На самом деле есть и третий способ использования прерываний, но я предполагаю, что второй вариант лучше в вашем случае, и он достаточно отзывчив, учитывая задачи, которые вы хотите выполнять с помощью Arduino.)

,

«Если 60 000 не принимается» — Arduino.h определяет delay() для приема беззнакового длинного аргумента, поэтому компилятор будет знать, разрешить ли длинное значение или преобразовать (расширить) значение, которое в противном случае могло бы потребовать меньшего объема памяти., @JRobert

Я склонен думать, что использование delay() - это тупик, и вместо того, чтобы говорить OP, чтобы он обновлял свой код с более длительной задержкой, мы должны сказать ему переписать свой код, следуя шаблону "мигать без задержки"., @Duncan C

@JRobert Спасибо… Я обновил ответ (и включил ваше имя)., @Michel Keijzers

@Duncan C … Я тоже так думаю, поэтому я упомянул и то, и другое, но добавил ссылку и ваше имя. Спасибо за обновление., @Michel Keijzers