Как остановить двигатель через заданное время?
Я пытаюсь остановить двигатель постоянного тока через заданное время !! И мотор заводится при достижении состояния!! С этого самого момента я хочу, чтобы мой мотор просто поработал 5 секунд и остановился!! Ниже приведен псевдокод:
#define max 150
#define min -150
#define pin1 3
void setup()
{
Serial.begin(9600);
mpu.initialise();
}
void loop()
{
x= some_accelerometer_values;
If (x>250)
{
analogWrite(pin1,255);
delay(5000);
exit(0);
}
}
Я пробовал использовать millis(), но он начинается с выполнения программы, и я не могу реализовать его непосредственно перед запуском двигателя!
@Hrithik Baishakhiya, 👍-1
Обсуждение1 ответ
Предполагая, что вы включаете двигатель с помощью analogWrite(pin1, 255);
просто напишите analogWrite(pin1, 0);
после delay(5000);
.
И использование exit(0);
не так уж и плохо, как люди, скорее всего, скажут. Использование exit(0) аналогично cli();
+ while(1)
. Таким образом, он отключает прерывания и помещает ваш код в цикл while, пока вы не перезагрузите Arduino.
Но если x какое-то время остается больше 250, то он будет работать до тех пор, пока x < 250!!, @Hrithik Baishakhiya
@HrithikBaishakhiya, так как вы использовали выход(0); вы хотите, чтобы ваш код запускался только один раз. А если вы напишете AnalogWrite(pin1, 0); перед выходом (0) ваш мотор выключится. Тогда программа остановится и не будет спрашивать, больше х 250 или нет., @Zunzulla alagaty
@HrithikBaishakhiya if() запускается по условию и будет выполняться только один раз за цикл(), @Zunzulla alagaty
Я уважаю ваши усилия!! Но не рекомендуется использовать exit(0); как написано в некоторых контекстах и предложено Крислом выше !! Я тут немного запутался!!, @Hrithik Baishakhiya
@HrithikBaishakhiya, насколько я знаю, выход(0); отключает прерывания и переводит Arduino в цикл while(1). Я только что попробовал это на своем Arduino-Uno. Это по сути цикл(), но с отключением прерываний., @Zunzulla alagaty
- Две батареи делят землю?
- Релейный модуль для водяного насоса
- Сервопривод продолжает сбрасывать положение, когда нет разницы в полученном значении?
- Использую nRF2401, и в передатчике и приемнике Rx не мигает, а Tx мигает; почему Rx не мигает?
- Работа двигателя в течение 3 секунд непрерывно с прерыванием и без него
- Перегорают ли мои шаговые двигатели? В чем здесь проблема?
- Использование прерывания внутреннего таймера для чтения аналогового датчика
- Мне нужна хорошая рекомендация батареи
1. Не используйте exit(0) на микроконтроллере. Нет ОС, которая могла бы взять на себя управление после окончания программы. Лучше используйте бесконечный цикл, если вы хотите завершить программу и больше ничего не делать., @chrisl
2. Вы поняли пример BlinkWithoutDelay, который поставляется с Arduino IDE? Я довольно хорошо объясняю использование
millis()
. Вы берете временную метку (значениеmillis()
), когда возникает условие запуска, а затем вычисляете разницу между текущим значениемmillis()
и временной меткой и сравниваете ее с 5 с (5000 мс)., @chrislНедурно за выход(0); информация !! Я этого не знал, и это не работало !! Но миллис(); это хлопотно!! Идет отсчет времени с момента запуска программы !! И не с момента запуска мотора!!, @Hrithik Baishakhiya
@HrithikBaishakhiya Вы можете использовать переменную, чтобы сохранить время запуска двигателя. Затем всегда проверяйте разницу между текущим моментом и моментом запуска двигателя. А если разница >= то 5 секунд он выключается, @Zunzulla alagaty
Но миллис(); это хлопотно!! Идет отсчет времени с момента запуска программы !! И не с момента запуска мотора!!
..... как сварить яйцо 3 минуты по часам, без таймера?, @jsotola