Шаговый двигатель 28BYJ-48. Прошу помощи в доработке класса

А составитель программы тут ваще никаким боком?

Оно не так работает.
При вызове команд “ТхМ6”, барабан поворачивается на позицию"х", происходит обмен инструмента в шпинделе “у” на инструмент “х”, станок запоминает (причем в энергонезависимую память), что в шпинделе в него стоит теперь инструмент “х”, а инструмент “у” возвращается в ту ячейку в которой он был.
Так что не просто “запоминает” а помнит даже при выключении.

Я видел, что инструмент возвращался не в ту ячейку. Это было в 1992 году.

Такое тоже бывает.
Для этого создаются таблицы, в которых потом “пасьянс” раскладывается.
Тупо перезаписываются ячейки с номером инструмента и корректорами.
Программа усложняется, а это опять же LD.
В общем лишний и ненужный геморрой.
Мы такое не используем.
С цепями барабаны на овердофуя позиций не делали.

В общем в первом случае таблица коррекции длин и диаметров привязана к ячейке инструмента, а во втором к номеру инструмента, а в ячейку инструмента записывается номер инструмента.
Ну и соответственно второй случай более сложен в реализации.

Кроме операций с барабаном нужно ещё написать алгоритм нахождения кратчайшего пути к нужной ячейке.

Года два назад познакомился случаайно с инженером-конструктором.
Поинтересовался у него как детали для изготовления на ЧПУ программируются.
Он сказал, что чертишь на монитере деталь заданных размеров и форм - и все.
Но там, оказывается, и других премудростей хватает.

Так направления у “конструкторства” разные.
Что касается деталей под изготовление на станке ЧПУ, то да.
Тупо модель.
Дальше пусть программист-технолог думает как это выточить из куска металла.

@Kakmyc , ты профессионал, я любитель. Строго не суди, путаю названия должностей)

Хотел на Компас модуль такой, чтоб и программу создавать, но это денех стоит, а ломаных не нашёл. Так и приходится ручками всё на станке.

У полушагового шаговика 8 состояний выходов, идущих на драйвер движка. Их надо закодировать побитно в 8 байт, и выдавать прямо в порт, где подключены выходы на биты порта 0, 1, 2, 3.
И переключать при каждом шаге одну переменную - назовем Фаза, значения 0…7. Переключать или в + или в - в зависимости от направления.
И всё будет просто и наглядно, как мычание ахаха.

uint8_t const DrvState[]=
{
  0b0001,
  0b0011
  //и так 8 состояний, лень вставлять реальные
};

uint8_t Faza=0;

void Step(bool Direction)
{
  if (Direction) Faza++; else Faza--; Faza &= 0b111; //гоняем фазу туда-сюда на состояния 0...7
  PORTC = (PORTC & 0b11110000) | DrvState[Faza]; //внедряем младшие 4 бита в порт
}


void setup() {
  // put your setup code here, to run once:
  DDRC=0; //output
}

void loop() {
  // put your main code here, to run repeatedly:

}

Скетч использует 444 байт (1%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт. ))

Состояния берем из таблицы:


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