После Serial.print код выполняется не корректно

Vasilisk
Offline
Зарегистрирован: 22.09.2017
#include <AccelStepper.h>
#include <max6675.h>

MAX6675 thermocouple(30, 32, 31);
AccelStepper Stepper1(1,50,51); 

int dir = 1;

void setup() {
  Serial.begin(9600);
  Stepper1.setMaxSpeed(2000); 
  Stepper1.setAcceleration(23000);
}

void loop() {

    Serial.print(thermocouple.readCelsius());
    Serial.println(" ");

  if(Stepper1.distanceToGo()==0){
    Stepper1.move(6400*dir);
    dir = dir*(-1);
    delay(1000);
  }
Stepper1.run();
}

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не туда кликнул, тема создалась, теперь не могу найти как редоктировать... 

Т.е. Без Serial.print все работает, если его добавить, то на движок подается что-то непонятное. 

П.С. *некорректно

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

вот это што?

AccelStepper Stepper1(1,50,51);

Если 1 в скобках это номер ноги, то так и должно быть

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Первый режим драйвера, пины 50 и 51. Говорю же, без Serial.print все работает.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Виноват, невнимательно посмотрел код и написал глупость :(

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Эх, а я уже обрадовался, что проблемма решина, хоть и каким-то странным методом. Так что же делать? (

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Попробуйте перед строкой 25 вставить cli(); а после неё sei(); Скажите поможет ли.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не помогло.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

А если тоже самое со строкой 21 (и 25-ую оставьте - обе сделайте). И, если не поможет, дайте текущий скетч.

b707
Offline
Зарегистрирован: 26.05.2017

а если так

#include <AccelStepper.h>
#include <max6675.h>

MAX6675 thermocouple(30, 32, 31);
AccelStepper Stepper1(1,50,51); 

int dir = 1;
double tt;
void setup() {
  Serial.begin(9600);
  Stepper1.setMaxSpeed(2000); 
  Stepper1.setAcceleration(23000);
}

void loop() {
    tt = thermocouple.readCelsius();
    Serial.print(tt);
    Serial.println(" ");

  if(Stepper1.distanceToGo()==0){
    Stepper1.move(6400*dir);
    dir = dir*(-1);
    delay(1000);
  }
Stepper1.run();
}

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не помогло

#include <AccelStepper.h>
#include <max6675.h>

MAX6675 thermocouple(30, 32, 31);
AccelStepper Stepper1(1,22,23); 

int dir = 1;

void setup() {
  Serial.begin(9600);
  Stepper1.setMaxSpeed(2000); 
  Stepper1.setAcceleration(23000);
}

void loop() {

    Serial.print(thermocouple.readCelsius());
    Serial.println(" ");
    delay(1000);

  if(Stepper1.distanceToGo()==0){ //проверка, отработал ли двигатель предыдущее движение
    cli();
    Stepper1.move(6400*dir); //устанавливает следующее перемещение на 1600 шагов (если dir равен -1 будет перемещаться -1600 -> противоположное направление)
    sei();
    dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
    delay(1000); //задержка на 1 секунду
  }
cli();
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
sei();
}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Vasilisk, имейте ввиду, что строкой Serial.print(thermocouple.readCelsius()); вы вызываете две функции. Может сериал тут и не имеет никакого отношения, особенно если принять во внимание что функция thermocouple.readCelsius() использует  тормозную ардуиновскую библу.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Даже если оставить только строчку Serial.println(" ");, все рано не работает. Двигатель не шевелится, только попискивает, как буд-то бы на него помехи идут.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Ну, похоже, приплыли, надо внимательно смотреть библиотеку двигателя. Она же, сволочь, асинхронно работает, а сериал свои прерывания гонит, вот там что-то ломается с таймингами. Я бы посмотрел, но у меня сейчас нет под рукой нужного железа, извините :(

Всё, что молу посоветовать - запускайте мотор через драйвер (типа там A4988), тогда Вы не будете чувствительны к таймингам, там и без библиотеки всё элементарно делается

Vasilisk
Offline
Зарегистрирован: 22.09.2017

У меня TB6560. И мне важно обеспечить очень плавный ход. Сейчас попробую через другую библиотеку.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Vasilisk пишет:

У меня TB6560. И мне важно обеспечить очень плавный ход. Сейчас попробую через другую библиотеку.

А лучше вовсе безо всякой библиотеки. Там всё настолько элементарно делается. Вот, посмотрите примерчик маленький. Он, конечно, для A4988, но разницы-то нет особо никакой!!! У TB6560 тоже есть step-pin и dir-pin, осталось только шаг сконфигурить.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Vasilisk пишет:

Даже если оставить только строчку Serial.println(" ");, все рано не работает. Двигатель не шевелится, только попискивает, как буд-то бы на него помехи идут.

Ну по крайней мере поднимите скорость до 115200 :)

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Сделал как у вас... результат тот же.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Может я где-то очень глупо ошибся, и вы даже не подумали бы о таком?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Vasilisk пишет:

Сделал как у вас... результат тот же.

Это как у меня в примере или о чём-то другом речь?

Vasilisk
Offline
Зарегистрирован: 22.09.2017
#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
    Serial.print(thermocouple.readCelsius());
    Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

И что, без сериала работает?

Давайте уточним без чего именно работает.

1. Полностью удаляем работу с сериалом  (при этом в строке 18 сериал убираем, а thermocouple.readCelsius() оставляем!)
2. Оставим только строку 9
3. Оставим строки 9 и 18
4. Как сейчас.

Распишите, пожалуйста как работает, а как нет.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Если оставить только thermocouple.readCelsius(); то не работает. Если оставить только Serial.println(" ");, то дергается, как буд-то бы шаги пропускает.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Vasilisk пишет:

Если оставить только thermocouple.readCelsius(); то не работает. Если оставить только Serial.println(" ");, то дергается, как буд-то бы шаги пропускает.

Лучше бы Вы по пунктам расписали.

Я правильно пнимаю, что если Сериал убрать вовсе, а  thermocouple.readCelsius(); - оставить, то уже не работает? Так?

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

Пожалуйста! Сделайте так, как написал Евгений, то есть 4 варианта:

И про КАЖДЫЙ напишите. Иначе неясно как искать черную кошку в темной комнате.

1.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
 // Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
  //  Serial.print(thermocouple.readCelsius()); 
volatile int a = thermocouple.readCelsius(); 
 //   Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

2.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
 
 //  Serial.print(thermocouple.readCelsius()); 
volatile int a = thermocouple.readCelsius(); 
    //Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

3.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
    Serial.print(thermocouple.readCelsius());
 //   Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

4.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
    Serial.print(thermocouple.readCelsius());
    Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну и если грешите именно на Serial, логично было бы проверить, как изменится работа при выводе на LCD1602.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

1) Не работает. На движок подаются помехи, он не двигается, но побулькивает.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
 // Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
  //  Serial.print(thermocouple.readCelsius()); 
volatile int a = thermocouple.readCelsius(); 
 //   Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

2) Не работает. На движок подаются помехи, он не двигается, но побулькивает.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
 
 //  Serial.print(thermocouple.readCelsius()); 
volatile int a = thermocouple.readCelsius(); 
    //Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

3) Не работает. На движок подаются помехи, он не двигается, но побулькивает.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
    Serial.print(thermocouple.readCelsius());
 //   Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

4) Не работает. На движок подаются помехи, он не двигается, но побулькивает.

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
    Serial.print(thermocouple.readCelsius());
    Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

5) Работает движок (с таким кодом плохо, но работает)

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Вот фото, не кидайтесь тапками за сопли. Маленький драйвер обесточен, он идет к другому движку.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Ага, значит дело вовсе не в сериале, похоже. Т.к. с полностью уделённой работой с сериалом всё равно не работает.

Давайте-как ещё одине тест.

Serial оставляем вместе с печатью, но полностью удаляем термопару, вплоть до #include - полностью, чтоб даже следова не было.

Если в таком виде работает, то давайте сразу, чтобы время не терять, сылку откуда брали библиотеку термопары(если не помните, то саму библиотеку) и опять же свежий скетч. Чтобы мы были уверены, что смотрим не одно и тоже.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Во, а я про термопару сразу сказал в #11 :)

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

А если вынести serial.print в сетап и посмотреть как отработает. Если заработает, то выводить в сериал не каждый цикл loop а, например, раз в секунду или две. Температура все равно инертна, нет смысла каждые миллисекунды её измерять.

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Убрал. Вот так работает, но не правильно, совсем не так, как вообще без Serial.println(" ");. Такое ощущение, что Serial.println(" "); отправляет пустую строчку на драйвер. Попробовал вместо Serial.println(" "); написать Serial.println(" Text ");, движок начал дергаться и пещать.

#define  DIR_PIN 23
#define STEP_PIN  22

void setup() {
  Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}


void loop() {

    Serial.println(" ");
  
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(1);
}

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Да, не удивлюсь, если в термопарной библиотеке стоит delay(100500)

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Может что-то с заземление не так подключил и он помехи отправляет?

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Я же отключил библиотеку.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Vasilisk, я вам писал сделать скорость сериала 115200, какого х.. у вас опять 9600 ?

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не знаю, как это должно помочь, сделал, все так же.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Дубль два, попробуйте в сериал выводить не каждый цикл а раз в две три секунды

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

ТС тупо переписал пример у Евгения. Для этого драйвера 1 мкс это  мало.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

wdrakula пишет:

ТС тупо переписал пример у Евгения. Для этого драйвера 1 мкс это  мало.

Даже если мало, то и с библиатеками под этот драйвер не работает. Так что суть не в этом.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Penni пишет:

А если вынести serial.print в сетап и посмотреть как отработает. Если заработает, то выводить в сериал не каждый цикл loop а, например, раз в секунду или две. Температура все равно инертна, нет смысла каждые миллисекунды её измерять.

 

Все равно будет передавать помехи раз в пару секунд, это не решение проблемы. Но позже попробую и отпишусь. Просто вы отправили сообщение одновременно с моим и я его не заметил.

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

Vasilisk пишет:

wdrakula пишет:

ТС тупо переписал пример у Евгения. Для этого драйвера 1 мкс это  мало.

Даже если мало, то и с библиатеками под этот драйвер не работает. Так что суть не в этом.

Если Вы хотите решения задачи, то я могу помочь. Если обсуждения, как в гараже с мужиками "от чего искра в землю ушла?", то я прошу прощения за вмешательство.

1. В тестировании без участия вывода в сериал, вы написали, что двигатель работает, но не очень хорошо, поэтому подставьте не 1, а 50 мкс. в код примера 5, сообщения 26.

2. если все нормально стало. то идем дальше. Вы писали, что вывод в сериал "текст" делает хуже, чем просто " ", так?

Это потому, что "текст" длиннее. На 115200 на одну букву уходит больше 80 мкс. на 5 букв - почти полмиллисекунды.

Поэтому следующий тест - это длинный - 50 или 100 мкс - импульс и задержка на 10 миллис. если норм, то пойдем дальше, если нет - покажу вам, как сделать управление двигателем неблокирующим, на таймере. Но это потом.

======

и забудьте про бред с помехами от сериала. Этого просто не бывает, как бабы Яги и деда Мороза.

-----------------

Никакие библиотеки вам не помогут, так как почти все они содержат только блокирующие реализации.

Вам же нужно и для термопары и для двигателя - неблокирующие...

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Суть понял. Попробовал то, что вы написали, скорость упала настолько, что почти не заметно вращения.

Однако если попробовать вот так (использовать Serial.println(" text "); в качестве задержки), то работает норм, но скорость все равно в несколько раз меньше, чем при работе с помощью библиотеки. Да и регулировать таким образом скорость - костыли какие-то.

void loop() {
    Serial.println(" text ");
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    delay(0);
}

Да-да, я понял, что импульс в 1 мкс недостаточно, я пробовал сравнивать 1 и 50, зрительно разницы нет. Если это влияет на что-то еще, то напишите на что, я не понимаю.

Попробовал так же с библиатекой "AccelStepper", из-за Serial.println(" ") скорость упала настолько, что практически не заметно движения.

Попробовал так:

void loop() {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(1);
    digitalWrite(STEP_PIN, LOW);
    Serial.print(thermocouple.readCelsius());
}

Все работает, но скорость двигателя примерно шаг в секунду. И с библиатекой "AccelStepper" вообще не двигается соответственно.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Попробуйте так

#include <max6675.h>

#define  DIR_PIN 23
#define STEP_PIN  22

MAX6675 thermocouple(30, 32, 31);

void setup() {
  // Serial.begin(9600);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);

  // Инициализировать TIMER1
  noInterrupts (); // отключить все прерывания
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 125; // сравнить регистр 16 МГц / 256/500 Гц (2ms=125)
  TCCR1B |= (1 << WGM12); // Режим СТС
  TCCR1B |= (1 << CS12); // 256 делитель
  TIMSK1 |= (1 << OCIE1A ); // включить таймер сравнить прерываний
  interrupts(); // включить все прерывания

}

ISR (TIMER1_COMPA_vect) // Функция прерывания таймера
{
  static bool steper;
  digitalWrite(STEP_PIN, steper);
  steper = !steper;
}

void loop() {
  volatile int a = thermocouple.readCelsius();
  Serial.print(a);
  Serial.println(" ");

}

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не понял как это работает, но если поставить после вызова функции температуры delay(500);, то работает. Без задержки температура не отображается. Ну и скорость двигателя само собой очень низкая.

Попробовал вот так, все еще не знаю, как это работает, но работает. Прошу объяснить. И можно ли увеличит скорость двигателя? Если у меня несколько двигателей и их скорость зависит от датчиков, то как таймером пользоваться?

#include <max6675.h>
#include <AccelStepper.h>


MAX6675 thermocouple(30, 32, 31);
AccelStepper Stepper1(1,22,23); 

int dir = 1;

void setup() {
  Serial.begin(9600);
  Stepper1.setMaxSpeed(1000); 
  Stepper1.setAcceleration(200);

    // Инициализировать TIMER1
  noInterrupts (); // отключить все прерывания
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 125; // сравнить регистр 16 МГц / 256/500 Гц (2ms=125)
  TCCR1B |= (1 << WGM12); // Режим СТС
  TCCR1B |= (1 << CS12); // 256 делитель
  TIMSK1 |= (1 << OCIE1A ); // включить таймер сравнить прерываний
  interrupts(); // включить все прерывания
}

ISR (TIMER1_COMPA_vect) // Функция прерывания таймера
{
  if(Stepper1.distanceToGo()==0){ //проверка, отработал ли двигатель предыдущее движение
    Stepper1.move(10000*dir); //устанавливает следующее перемещение на 1600 шагов (если dir равен -1 будет перемещаться -1600 -> противоположное направление)
    dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
    delay(1000); //задержка на 1 секунду
  }
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
}

void loop() {
    Serial.print(thermocouple.readCelsius());
    Serial.println(" ");
    delay(1000);
}

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Смотрите сейчас код работает на прерывании от таймера (советую прочитать про прерывания тогда Вы поймете чдо delay ставить там ОЧЕНЬ вредно)
По поводу скорости - 1й вариант надо уменьшить дробление шага на драйвере до той точности какая Вам нужна, чет мне кажется что там очень большое дробление.
2й - уменьшить время прерывания таймера (читать про таймеры)
и последнее если польоваться библиотекой то в прерывании я бы делал один шаг а все остальное (количество, скорость итд) в loop.
Vasilisk
Offline
Зарегистрирован: 22.09.2017

Почитаю. Всем спасибо за помощь! Надеюсь, что дальше сам разберусь.