Остановка программы через 1 секунду
Я новичок в программировании Arduino. Я работаю над проектом, в котором я управляю двигателем постоянного тока с помощью ИК-датчика и Arduino.
Пока здесь все в порядке. Но я хочу, чтобы мотор останавливался через одну секунду, даже если ИК-датчик обнаруживает препятствие
Вот моя программа
Контакт 2 — ИК-датчик Контакт 4,5,6-двигатель
enter code here
//Включенные библиотеки
#include <motor.h>
//Здесь определяются МАКРОСЫ
Motor Motor1(4, 5, 6);
void setup() {
// поместите сюда код установки для однократного запуска:
pinMode(2, INPUT);
}
void loop() {
// поместите сюда свой основной код для повторного запуска:
if(digitalRead(2)) {
Motor1.moveMotor(2.55*0);
}
else {
Motor1.moveMotor(2.55*100);
}
}
Может ли кто-нибудь помочь в этой программе. Я просто хочу, чтобы мотор остановился через одну секунду. Заранее спасибо!
1 ответ
Лучший ответ:
Вам нужно использовать чтение времени (millis()
) при запуске двигателя и часто считывать его во время работы двигателя, чтобы знать, когда его остановить. Вам также необходимо следить за датчиком и не запускать двигатель снова, пока не увидите, что датчик отключился (обнаружение препятствия отсутствует). Вот набросок логики псевдокода; превратить это в подробную функцию loop()
на C++:
if the motor is ON {
if (millis() - motorStartMillis) > 1000 {
stop the motor;
}
else if sensor is ON {
if the sensor was OFF {
start the motor;
motorStartMillis = millis();
sensorWasOn = true;
}
}
else { // датчик должен быть выключен
sensorWasOn = false;
}
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Почему сервопривод вращается на 360 градусов?
- Объектно-ориентированное программирование Arduino
- Как повторить код
- Мой моторный щит сломан?
- Операторы If/Else на Arduino не выполняются
- Один порт моторного щита не работает с шаговым двигателем.
- Почему я не могу контролировать скорость двигателя? (М1 и Е1)
Сначала отредактируйте свой вопрос, выберите весь свой код и нажмите кнопку
{}
, чтобы отформатировать его., @Duncan CКроме того, вам нужно более четко объяснить свою цель. Что должно запускать ваш мотор? ИК датчик? Вы говорите: «Я хочу, чтобы мотор остановился через одну секунду, как только датчик обнаружит препятствие». Я не понимаю, что это значит. Вы хотите, чтобы он работал как минимум одну секунду, несмотря ни на что, и по прошествии секунды ИК-датчик останавливал его, если он обнаружит препятствие?, @Duncan C
«_через одну секунду_» рядом с «_как только_» — это противоречие., @Edgar Bonet
Вы показываете код, который считывает контакт 2. Это ваш ИК-датчик? Что делают 2 разных моторных вызова? Остановит ли moveMotor(0) мотор, а moveMotor(255) заставит мотор двигаться?, @Duncan C
Извините, я не ясно изложил свою точку зрения. Я отредактировал Вопрос. Спасибо, @Nallella Shashank
Для того, чтобы делать временные вещи, узнайте, как использовать функции
millis()
. Посмотрите на примерBlinkWithoutDelay
и поищите в Google руководства по этой функции. Когда вы поймете, как работают эти примеры и руководства, вы сможете адаптировать их для своего кода., @chrislmoveMotor(0) останавливает двигатель, а moveMotor(2,25*100) заставляет двигатель работать., @Nallella Shashank
Вы улучшили несколько вещей, но мы все еще не можем понять вашу цель. Пожалуйста, опубликуйте полное заявление о том, как вы хотите, чтобы ваш скетч вел себя. Фраза «Я хочу, чтобы Мотор остановился через одну секунду, как только датчик обнаружит Препятствие» не имеет смысла. Часть «Через одну секунду» противоречит "как только датчик обнаружит препятствие"., @Duncan C
Motor1.moveMotor(2,55*100); задержка(1000); Motor1.moveMotor(0);
работает на вас?, @Thomas Wellerпосмотрите примеры скетчей в Arduino IDE... посмотрите на тот, который называется
StateChangeDetection
, @jsotola