Код для вращения шагового двигателя

Здравствуйте, делаю проект по повороту шагового двигателя 28BYJ-48 на назначенный угол. Есть плата ардуино уно, плата управления с драйвером drv8825, плата питания, и энкодер и дисплей, на котором я выставляю нужный угол. При изменении float stepResolution = 2 , на значение 1 то двигатель работает только в полношаговом режиме, если значение 2 то работает в полушаговом режиме, в остальных режимах не доезжает, в чем может быть проблема?
#include <TM1637Display.h>

#include <AccelStepper.h>

#include <Encoder.h>

#define CLK A5

#define DIO A4

#define STEP_PIN 2

#define DIR_PIN 3

#define MS1_PIN 4

#define MS2_PIN 5

#define MS3_PIN 6

#define BUTTON_PIN 7

TM1637Display display(CLK, DIO);

Encoder myEnc(8, 9);

AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

int angle = 0;

int targetAngle = 0;

int direction = 1;

int stepMode = 1;

bool buttonPressed = false;

bool motorRunning = false;

bool encoderTouched = false;

void save_parameters() {

// Здесь ваш код для сохранения параметров

// Например, сохранение в EEPROM или в другое хранилище

}

void setup() {

pinMode(MS1_PIN, OUTPUT);

pinMode(MS2_PIN, OUTPUT);

pinMode(MS3_PIN, OUTPUT);

pinMode(BUTTON_PIN, INPUT_PULLUP);

display.setBrightness(0x0f);

stepper.setMaxSpeed(10000);

stepper.setAcceleration(10000);

motorRunning = false;

}

void loop() {

int newPosition = myEnc.read();

angle = newPosition;

display.showNumberDec(angle);

if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed && !motorRunning) {

targetAngle = angle;

buttonPressed = true;

motorRunning = true;

int steps = calculateSteps(targetAngle);

stepper.move(steps);

stepper.setSpeed(direction * 100);

}

if (digitalRead(BUTTON_PIN) == HIGH) {

buttonPressed = false;

}

if (motorRunning) {

if (stepper.distanceToGo() == 0 && motorRunning) {

motorRunning = false;

display.showNumberDec(targetAngle);

save_parameters(); // Сохранение параметров после остановки двигателя

}

stepper.run();

}

if (digitalRead(5) == LOW) {

direction = -1;

} else {

direction = 1;

}

switch (stepMode) {

case 1:

digitalWrite(MS1_PIN, LOW);

digitalWrite(MS2_PIN, LOW);

digitalWrite(MS3_PIN, LOW);

break;

case 2:

digitalWrite(MS1_PIN, HIGH);

digitalWrite(MS2_PIN, LOW);

digitalWrite(MS3_PIN, LOW);

break;

case 3:

digitalWrite(MS1_PIN, LOW);

digitalWrite(MS2_PIN, HIGH);

digitalWrite(MS3_PIN, LOW);

break;

case 4:

digitalWrite(MS1_PIN, HIGH);

digitalWrite(MS2_PIN, HIGH);

digitalWrite(MS3_PIN, LOW);

break;

case 5:

digitalWrite(MS1_PIN, HIGH);

digitalWrite(MS2_PIN, HIGH);

digitalWrite(MS3_PIN, HIGH);

break;

}

}

int calculateSteps(int targetAngle) {

int stepsPerRevolution = 0;

switch (stepMode) {

case 1:

stepsPerRevolution = 2048; // полношаговый режим

break;

case 2:

stepsPerRevolution = 4096; // полушаговый режим

break;

case 3:

stepsPerRevolution = 2048 * 4; // 1/4 шага

break;

case 4:

stepsPerRevolution = 2048 * 8; // 1/8 шага

break;

case 5:

stepsPerRevolution = 2048 * 16; // 1/16 шага

break;

}

float stepResolution = 2; // Разрешение шага (по умолчанию 1)

float steps = (float)targetAngle / 360.0 * (float)(stepsPerRevolution * stepResolution);

return round(steps);

}

Почитайте правило вставки кода на форум !