Таймер для управления двигателем с помощью концевого выключателя
Я не силен в arduino, но у меня есть проект, который управляет двигателем с помощью концевого выключателя.
Правило таково:
При выключении двигатель ВКЛЮЧАЕТСЯ
При включении выключите двигатель на 1 час (я не хочу использовать задержку, потому что не могу выполнять многозадачность, поэтому будет остановлена другая программа, которая должна работать в то же время)
Через 1 час двигатель ВКЛЮЧЕН (хотя состояние переключателя все еще включено)
Какой тип таймера я должен использовать? А как же код? Спасибо. Извините, если у меня нет никаких кодов.
@Choirin Nisa, 👍-1
Обсуждение1 ответ
Для этого нет необходимости делать такие сложные вещи, как использование дополнительных таймеров. Вы можете использовать неблокирующий код с функцией millis ()
, как в примере BlinkWithoutDelay в среде IDE Arduino (вы действительно должны попробовать и понять, как это работает). Функция
millis()
возвращает количество миллисекунд с момента включения Arduino, и она переполнится примерно через 50 дней (и с кодом из упомянутого примера это тоже не будет проблемой).
В основном вы сохраняете метку времени последнего события и проверяете, не пора ли что-то сделать. В вашем случае я бы добавил логическое значение, указывающее, что двигатель должен быть выключен и что состояние переключателя больше не имеет значения. Затем (я предполагаю, что вы хотите снова отключить двигатель, переключившись в положение "ВЫКЛ." и снова " ВКЛ.") вам придется сбросить эту переменную, когда переключатель снова перейдет в состояние " ВЫКЛ.". Что-то вроде этого:
boolean state=true; // on by default
unsigned long timestamp=0;
void loop(){
if(switch_on() && state){
state=false;
// switch off the motor here
timestamp = millis();
}
if(switch_off()){
state=true;
}
if(!state && millis()-timestamp > INTERVAL){
//switch on the motor here
}
}
Убедитесь, что у вас есть хороший код для проверки состояния переключателя, так как большинству механических кнопок требуется код отмены. В приведенном выше коде я заменил это простыми функциями, чтобы проиллюстрировать функциональность синхронизации.
вам нужно только отключить выключатель, когда двигатель запустится, @jsotola
- Использование транзистора NPN в качестве переключателя для включения/выключения двигателя постоянного тока
- Двигатель постоянного тока Arduino с 2 кнопками
- Управление двигателем Arduino Uno с помощью 2 реле, 2 концевых выключателей и Bluetooth. Вперед Назад Стоп
- Как переключить светодиод и двигатель при нажатии кнопки?
- Arduino сбрасывается или зависает во время работы, только когда подключены двигатели постоянного тока
- Попытка переключить 5-вольтовый вентилятор на LiPo и не может понять, что не так при полном рабочем цикле.
- Энкодер соединен с валом двигателя. Энкодер выдает более высокие значения, чем ожидалось.
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
Вы можете сделать задержку на 1 час с помощью
millis()
(хотя это не 100% точно). Если время сейчас, за вычетом времени, когда был нажат выключатель, составляет более одного часа, то включите двигатель., @Majenko