Остановка программы через 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);
    }
}

Может ли кто-нибудь помочь в этой программе. Я просто хочу, чтобы мотор остановился через одну секунду. Заранее спасибо!

, 👍0

Обсуждение

Сначала отредактируйте свой вопрос, выберите весь свой код и нажмите кнопку {}, чтобы отформатировать его., @Duncan C

Кроме того, вам нужно более четко объяснить свою цель. Что должно запускать ваш мотор? ИК датчик? Вы говорите: «Я хочу, чтобы мотор остановился через одну секунду, как только датчик обнаружит препятствие». Я не понимаю, что это значит. Вы хотите, чтобы он работал как минимум одну секунду, несмотря ни на что, и по прошествии секунды ИК-датчик останавливал его, если он обнаружит препятствие?, @Duncan C

«_через одну секунду_» рядом с «_как только_» — это противоречие., @Edgar Bonet

Вы показываете код, который считывает контакт 2. Это ваш ИК-датчик? Что делают 2 разных моторных вызова? Остановит ли moveMotor(0) мотор, а moveMotor(255) заставит мотор двигаться?, @Duncan C

Извините, я не ясно изложил свою точку зрения. Я отредактировал Вопрос. Спасибо, @Nallella Shashank

Для того, чтобы делать временные вещи, узнайте, как использовать функции millis(). Посмотрите на пример BlinkWithoutDelay и поищите в Google руководства по этой функции. Когда вы поймете, как работают эти примеры и руководства, вы сможете адаптировать их для своего кода., @chrisl

moveMotor(0) останавливает двигатель, а moveMotor(2,25*100) заставляет двигатель работать., @Nallella Shashank

Вы улучшили несколько вещей, но мы все еще не можем понять вашу цель. Пожалуйста, опубликуйте полное заявление о том, как вы хотите, чтобы ваш скетч вел себя. Фраза «Я хочу, чтобы Мотор остановился через одну секунду, как только датчик обнаружит Препятствие» не имеет смысла. Часть «Через одну секунду» противоречит "как только датчик обнаружит препятствие"., @Duncan C

Motor1.moveMotor(2,55*100); задержка(1000); Motor1.moveMotor(0); работает на вас?, @Thomas Weller

посмотрите примеры скетчей в Arduino IDE... посмотрите на тот, который называется StateChangeDetection, @jsotola


1 ответ


Лучший ответ:

0

Вам нужно использовать чтение времени (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;
}
,