Пытаюсь заставить шаговые моторы (нема17) работать с ускорением. Просто крутит, а с плавным стартом никак... Задача - управлять 2умя моторами с помощью соответственно 4ех кнопок. Скорость задается переменниками, на каждый мотор своё.
Причем если загружаю демку, где крутит туда-сюда, то все работает нормально и с плавным стартом... Библиотека и старая стояла и новую скачал... не помогает.
В чем у меня ошибка ?
а это то что я написал, где движется, но без разгона... хотя я его указал...
Второй мотор я даже пока не прописывал... т.к. нет плавности.
Подскажите в чем у меня ошибка. Спасибо.
Причем если загружаю демку, где крутит туда-сюда, то все работает нормально и с плавным стартом... Библиотека и старая стояла и новую скачал... не помогает.
В чем у меня ошибка ?
Это демка, где все работает:
#include <AccelStepper.h>
const int dirPin = 4;
const int stepPin = 5;
int i = 0;
#define EN 9 // пин включения моторов
// Определение тип интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Устанавливаем максимальную скорость, коэффициент ускорения,
// начальную скорость и целевую позицию
myStepper.setMaxSpeed(200000);
myStepper.setAcceleration(10000);
myStepper.setSpeed(200000);
myStepper.moveTo(10000);
pinMode(EN, OUTPUT);
digitalWrite(EN, HIGH); // активируем моторы
pinMode(10, OUTPUT); // минус для ключа под EN
digitalWrite(EN, HIGH);
}
void loop() {
// Изменение направления вращения, когда двигатель достигнет заданного положения
if (myStepper.distanceToGo() == 0)
{
myStepper.moveTo(-myStepper.currentPosition());
}
// Передвинуть на 1 шаг
myStepper.run();
}
мой код:
#include <AccelStepper.h>
#define dirPinX 4
#define stepPinX 5
#define dirPinY 6
#define stepPinY 7
#define buttonY1 12
#define buttonY2 11
#define buttonX1 3
#define buttonX2 2
#define potentiometerX A2
#define potentiometerY A4
#define EN 9 // пин включения моторов
AccelStepper stepper1(1, stepPinX, dirPinX);
AccelStepper stepper2(1, stepPinY, dirPinY);
int buttonState1 = 0;
int buttonState2 = 0;
int lastButtonState1 = 0;
int lastButtonState2 = 0;
int direction = 0;
int potValue = 0;
void setup() {
pinMode(buttonX1, INPUT_PULLUP);
pinMode(buttonX2, INPUT_PULLUP);
pinMode(buttonY1, INPUT_PULLUP);
pinMode(buttonY2, INPUT_PULLUP);
stepper1.setMaxSpeed(15000);
stepper1.setAcceleration(100); // Установка ускорения двигателя
pinMode(EN, OUTPUT);
digitalWrite(EN, HIGH); // активируем моторы
pinMode(10, OUTPUT); // минус для ключа под EN
digitalWrite(EN, HIGH);
}
void loop() { // нажали едем, отпустили стоим...
buttonState1 = digitalRead(buttonX1);
buttonState2 = digitalRead(buttonX2);
if ((buttonState1 == HIGH) && (buttonState2 == HIGH)) { // когда отпустили кнопки считали скорость
potValue = analogRead(potentiometerX);
potValue = map(potValue, 0, 1023, 100, 15000);
}
if (buttonState1 != lastButtonState1) {
if (buttonState1 == LOW) {
direction = 1;
} else {
direction = 0;
}
}
if (buttonState2 != lastButtonState2) {
if (buttonState2 == LOW) {
direction = -1;
} else {
direction = 0;
}
}
lastButtonState1 = buttonState1;
lastButtonState2 = buttonState2;
stepper1.setSpeed(potValue * direction);
stepper1.runSpeed();
}
Подскажите в чем у меня ошибка. Спасибо.