двигатель гудит но не крутится

Этот код вращает против часовой стрелки

   #include <AccelStepper.h>

// Пины подключения драйвера A4988 к NodeMCU
#define DIR_PIN D1
#define STEP_PIN D2
#define ENABLE_PIN D3 // Если используете

// Создаем объект для управления шаговым двигателем
AccelStepper stepper(AccelStepper::FULL4WIRE, STEP_PIN, DIR_PIN);

// Переменные для управления временем
unsigned long currentTime = 0;
unsigned long previousTime = 0;
const unsigned long interval = 5000; // Интервал времени в миллисекундах (5 секунд)

// Флаги для управления двигателем
bool clockwise = true;
bool motorOn = true;

void setup() {
  // Устанавливаем пины как выходные
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  // Если используете ENABLE_PIN
  pinMode(ENABLE_PIN, OUTPUT);

  // Включаем драйвер (если используете ENABLE_PIN)
  digitalWrite(ENABLE_PIN, LOW);

  // Настраиваем скорость и ускорение двигателя
  stepper.setMaxSpeed(1000); // Устанавливаем максимальную скорость в шагах в секунду
  stepper.setAcceleration(500); // Устанавливаем ускорение в шагах в секунду в квадрате

  // Указываем начальное направление движения (против часовой стрелки)
  stepper.setSpeed(-100); // Устанавливаем скорость движения в шагах в секунду
}

void loop() {
  currentTime = millis();
  
  // Вращение в одну сторону в течение 10 секунд
  if (motorOn) {
    if (currentTime - previousTime < interval && clockwise) {
      stepper.runSpeed();
    } 
    // После прошествия 10 секунд меняем направление вращения
    else if (currentTime - previousTime < interval * 2 && !clockwise) {
      stepper.setSpeed(100); // Устанавливаем скорость движения в другую сторону
      stepper.runSpeed();
    } 
    // Сбрасываем время и флаг направления и повторяем цикл
    else {
      previousTime = currentTime;
      clockwise = !clockwise; // Изменяем направление вращения
    }
  }

  // После 5 секунд выключаем двигатель
  if (currentTime - previousTime >= 5000 && motorOn) {
    motorOn = false;
    digitalWrite(ENABLE_PIN, HIGH); // Выключаем двигатель
  }
  
  // После 10 секунд включаем двигатель снова
  if (currentTime - previousTime >= 10000 && !motorOn) {
    motorOn = true;
    digitalWrite(ENABLE_PIN, LOW); // Включаем двигатель
    previousTime = currentTime;
    clockwise = true; // Устанавливаем начальное направление вращения
    stepper.setSpeed(-100); // Устанавливаем скорость движения
  }
}

но этот код не вращает по часовой стрелке, почему ?

#include <AccelStepper.h>

// Пины подключения драйвера A4988 к NodeMCU
#define DIR_PIN D1
#define STEP_PIN D2
#define ENABLE_PIN D3 // Если используете

// Создаем объект для управления шаговым двигателем
AccelStepper stepper(AccelStepper::FULL4WIRE, STEP_PIN, DIR_PIN);

// Переменные для управления временем
unsigned long currentTime = 0;
unsigned long previousTime = 0;
const unsigned long interval = 5000; // Интервал времени в миллисекундах (5 секунд)

// Флаги для управления двигателем
bool clockwise = true;
bool motorOn = true;

void setup() {
  // Устанавливаем пины как выходные
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  // Если используете ENABLE_PIN
  pinMode(ENABLE_PIN, OUTPUT);

  // Включаем драйвер (если используете ENABLE_PIN)
  digitalWrite(ENABLE_PIN, LOW);

  // Настраиваем скорость и ускорение двигателя
  stepper.setMaxSpeed(1000); // Устанавливаем максимальную скорость в шагах в секунду
  stepper.setAcceleration(500); // Устанавливаем ускорение в шагах в секунду в квадрате

  // Указываем начальное направление движения (по часовой стрелке)
  stepper.setSpeed(100); // Устанавливаем скорость движения в шагах в секунду
}

void loop() {
  currentTime = millis();
  
  // Вращение в одну сторону в течение 10 секунд
  if (motorOn) {
    if (currentTime - previousTime < interval && clockwise) {
      stepper.runSpeed();
    } 
    // После прошествия 10 секунд меняем направление вращения
    else if (currentTime - previousTime < interval * 2 && !clockwise) {
      stepper.setSpeed(-100); // Устанавливаем скорость движения в другую сторону
      stepper.runSpeed();
    } 
    // Сбрасываем время и флаг направления и повторяем цикл
    else {
      previousTime = currentTime;
      clockwise = !clockwise; // Изменяем направление вращения
    }
  }

  // После 5 секунд выключаем двигатель
  if (currentTime - previousTime >= 5000 && motorOn) {
    motorOn = false;
    digitalWrite(ENABLE_PIN, HIGH); // Выключаем двигатель
  }
  
  // После 10 секунд включаем двигатель снова
  if (currentTime - previousTime >= 10000 && !motorOn) {
    motorOn = true;
    digitalWrite(ENABLE_PIN, LOW); // Включаем двигатель
    previousTime = currentTime;
    clockwise = true; // Устанавливаем начальное направление вращения
    stepper.setSpeed(100); // Устанавливаем скорость движения
  }
}

Ответы (0 шт):