двигатель гудит но не крутится
Этот код вращает против часовой стрелки
#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); // Устанавливаем скорость движения
}
}