DTG printer / принтер планшетный

Так джойстик то заработал?

Нет , я его тогда вывел, что бы пока не путолся,
Нужно довести тестовую печать не до идеала но что бы я мог эксперементировать не отвлекаясь на чернила, железо итд. И вроде как уже нормально,
Далее вы там ранее писали что где то будут не точности, скорее всего они есть, и это вро де не головка, так как при повторении они примерно в одном и том же месте.
Если увеличить отпечаток на телевизоре видно в ередине в конце есть сбивка печати, полосы, вро де не головка, нужно будет внимательней присмотреться, и разобраться как float работает.
Далее логика, я не могу для себя понять, она меня на данный момент устраивает или нет, опыта мало.
Вроде кнопку нажал и все отпечаталось,
Повторяе ось 100%
Но как Цой пел, что то не так, а что я не могу пока сказать
Джойстик конечно помог бы в комфортной печати но вы сами сказали что дижиталрид и map
Медленные функции, я сегодня с кнопкой эксперементировал на нее садил функцию слежения за enc-- но были такие же глюки время от времени как с джойстиком и я устал с ней и тоже оставил как есть.

Размеры 100%

Если джойстик нужен , сначала нужно убедиться, что дело именно в analogRead(), см # 622

1 лайк

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

))))
Аналоговый джойстик с цифрового порта?
Хотя , даташит почитать - всегда полезно будет.

Да, A0 теперь,
A4 стоял ранее, теперь не работает, наверное сгорел.

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

//Энкодер на пинах 2, 3. Используется внутренняя подтяжка.
// volatile int enc, motor_position;
  int16_t enc, motorPos; 
  float Kmotor = 0.2945; //ПОДБИРАЕМ СООТНОШЕНИЕ МОТОР/ЭНКОДЕР


#define ENABLE_PIN  8
#define limitPin1    9
#define limitPin    10
#define button1   12
#define button2     5
#define mosfet     6             // mosfet и датчик бумаги



void setup(){                
  Serial.begin(115200);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(ENABLE_PIN , OUTPUT);
  pinMode(5, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(6, OUTPUT);
  pinMode(A0,INPUT_PULLUP);

  digitalWrite(ENABLE_PIN, 0); //пока включим драйвер на постоянку, чтобы не было пропусков

  PCIFR=PCIF2; PCICR=1<<PCIE2;               //разрешить прерывание
  PCMSK2=1<<PCINT18 | 1<<PCINT19;            //выбрать вход на котором сработает прерывание 
}






const int STEP_PIN = 4;
const int DIR_PIN = 7;
const int R360 = 600;                         //шагов на полный оборот
int knopka=0;
int T = 0;
int A = 0;



ISR(PCINT2_vect){
  static char EncPrev=0;                           //предыдущее состояние энкодера
  static char EncPrevPrev=0;                       //пред-предыдущее состояние энкодера
    char EncCur = 0;
    if(!(PIND & (1 << PD2))){EncCur  = 1;}         //опрос фазы 1 энкодера
    if(!(PIND & (1 << PD3))){ EncCur |= 2;}        //опрос фазы 2 энкодера

    if(EncCur != EncPrev)                          //если состояние изменилось,
    { if(EncPrev == 3 &&                             //если предыдущее состояние 3
          EncCur != EncPrevPrev )                      //и текущее и пред-предыдущее не равны,
      { 
        if(EncCur == 2) 
            enc++;
            
          else                          
            enc--;      
      }
   
      EncPrevPrev = EncPrev;                           //сохранение пред-предыдущего состояния
      EncPrev = EncCur;                                //сохранение предыдущего состояния
    }
}



void Step(bool Dir) //шаг в + или -
{
  if(Dir) {digitalWrite(DIR_PIN,0); motorPos++; } else {digitalWrite(DIR_PIN,1); motorPos--; } //направление шага
  //делаем шаг:
  
  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(1);
  digitalWrite(STEP_PIN, LOW);
}

void loop() {
  // Мотор следит за энкодером:
  int16_t deltaPos = enc-((int16_t) motorPos * Kmotor);
  if(deltaPos>=  1) Step(1); // надо делать шаг +
  if(deltaPos<= -1) Step(0); // надо делать шаг -

       if (!digitalRead(5)) {         
    
               
      digitalWrite(ENABLE_PIN, LOW);
      digitalWrite(DIR_PIN, HIGH);
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(50);
      digitalWrite(STEP_PIN, LOW);

      
	}


       if (!digitalRead(12)) {         // кнока управяет вкл. откл датчик бумаги 
         enc =0 ;
      motorPos = 0 ;         
      
      }
    if(digitalRead(12)==LOW&&knopka==0){
    delay(50);
    knopka++;
    digitalWrite(ENABLE_PIN, HIGH);
    digitalWrite(6, !digitalRead(6));   // вкл. или откл  mosfet и датчик бумаги
  }
  if(digitalRead(12)==HIGH&&knopka==1){
  knopka=0;
  }
    



   if (!digitalRead(9)) {	                      //pin коцевика задий
      digitalWrite(6, HIGH);                     // включим датчик бумаги
       PCICR = 0;                    // запрет прерваия энкодера  
       //delay(2);
       digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, LOW);
	    for (int i = 0; i < 2400; i++) {           //дистация отьезда от коцевика     
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(140);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      }
      PCICR=1<<PCIE2;                           // разрешить прерваия энкодера 
      enc =0 ;
      motorPos = 0 ;
    }


   if (!digitalRead(10)) {	                      //pin коцевика передий
      digitalWrite(6, LOW);                        // отключим датчик бумаги
        PCICR = 0;                     // запрет прерваия энкодера  
       //delay(2);
       digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, HIGH);
	    for (int i = 0; i < 1200; i++) {           //дистация отьезда от коцевика     
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(200);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      }
      PCICR=1<<PCIE2;                           // разрешить прерваия энкодера 
      enc =0 ;
      motorPos = 0 ;
    }

    A = analogRead(A0);                           //  pin joystick
    if (A > 700) {
      T = map(A, 700, 1123, 700, 0);
      digitalWrite(7, 1);
      digitalWrite(ENABLE_PIN, LOW);
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(T);
      digitalWrite(STEP_PIN, LOW);
    }


    if (A < 520) {
      T = map(A, 520, 0, 520, 0);                 // 500, 0); шкала перерасчета 
      digitalWrite(7, 0);
      digitalWrite(ENABLE_PIN, LOW);
      digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
    }
    
    if (A > 700 && A < 520) {
      PCICR=1<<PCIE2;
      enc =0 ;
      motorPos = 0 ;
    }
     
}

еще на концевики ставил по внешним прерываниям D9 и D10
так же хорошо работает как и с !digitalRead но так же и странно 1 в 1 или я что то не доделал .

//Энкодер на пинах 2, 3. Используется внутренняя подтяжка.
// volatile int enc, motor_position;
  int16_t enc, motorPos; 
  float Kmotor = 0.2945; //ПОДБИРАЕМ СООТНОШЕНИЕ МОТОР/ЭНКОДЕР


#define ENABLE_PIN  8
#define limit1      9
#define limit2      10
#define button1     12
#define button2     5
#define mosfet      6             // mosfet и датчик бумаги

  
void setup(){                
  Serial.begin(115200);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(ENABLE_PIN , OUTPUT);
  pinMode(5, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(6, OUTPUT);

  digitalWrite(ENABLE_PIN, 0); //пока включим драйвер на постоянку, чтобы не было пропусков  
  
  PCIFR=PCIF2; PCICR=1<<PCIE2;               //разрешить прерывание
  PCMSK2=1<<PCINT18 | 1<<PCINT19;            //выбрать вход на котором сработает прерывание  
  PCMSK0=1<<PCINT1;
  PCMSK0=1<<PCINT2;
  }
  
    
volatile uint8_t state = 0;
const int STEP_PIN = 4;
const int DIR_PIN = 7;
const int R360 = 600;                         //limit шагов на полный оборот;
int knopka=0;


ISR(PCINT2_vect){
  static char EncPrev=0;                           //предыдущее состояние энкодера
  static char EncPrevPrev=0;                       //пред-предыдущее состояние энкодера
    char EncCur = 0;
    if(!(PIND & (1 << PD2))){EncCur  = 1;}         //опрос фазы 1 энкодера
    if(!(PIND & (1 << PD3))){ EncCur |= 2;}        //опрос фазы 2 энкодера

    if(EncCur != EncPrev)                          //если состояние изменилось,
    { if(EncPrev == 3 &&                             //если предыдущее состояние 3
          EncCur != EncPrevPrev )                      //и текущее и пред-предыдущее не равны,
      { 
        if(EncCur == 2) 
            enc++; else enc--;      
      }
   
      EncPrevPrev = EncPrev;                           //сохранение пред-предыдущего состояния
      EncPrev = EncCur;                                //сохранение предыдущего состояния
    }
}



void Step(bool Dir) //шаг в + или -
{
  if(Dir) {digitalWrite(DIR_PIN,0); motorPos++; } else {digitalWrite(DIR_PIN,1); motorPos--; } //направление шага
  //делаем шаг:
  
  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(1);
  digitalWrite(STEP_PIN, LOW);
}



           
    
  ISR (PCINT0_vect) {             // Обработчик запросов прерывания от пинов D8..D13
  static char statePrev=0;                           //предыдущее состояние энкодера
    char stateCur = 0;
    if(!(PINB & (1 << PB1))){stateCur  = 1;}         //опрос фазы 1 энкодера 
	}
	
void loop() {
// Мотор следит за энкодером:
  int16_t deltaPos = enc-((int16_t) motorPos * Kmotor);
  if(deltaPos>=  1) Step(1); // надо делать шаг +
  if(deltaPos<= -1) Step(0); // надо делать шаг
  
  if(!(PINB & (1 << PB1))) {                        // Limit D9
    state = 1; // вкл. mosfet
    digitalWrite(mosfet, state);
	digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, LOW);
	    for (int i = 0; i < R360; i++) {           //дистация отьезда от коцевика        
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(70);                         // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      
      
     }
    }
	
  if(!(PINB & (1 << PB2))) {                       //  Limit  D10
    state = 0; // вкл. mosfet
    digitalWrite(mosfet, state);
	digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, HIGH);
	    for (int i = 0; i < R360; i++) {           //дистация отьезда от коцевика        
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(70);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      
      
     }
    }
}

  if (!digitalRead(12)) {                 // кнока управяет вкл. откл датчик бумаги 
      enc =0 ;
      motorPos = 0 ;         
      
      }
    if(digitalRead(12)==LOW&&knopka==0){
    delay(50);
    knopka++;
    digitalWrite(ENABLE_PIN, HIGH);
    digitalWrite(6, !digitalRead(6));       // вкл. или откл  mosfet и датчик бумаги
  }
  if(digitalRead(12)==HIGH&&knopka==1){
  knopka=0;
  }
  
  if (!digitalRead(5)) {             //  ЕДЕМ ВЕРЕД 
    digitalWrite(ENABLE_PIN, LOW);
    digitalWrite(DIR_PIN, HIGH);
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(50);
    digitalWrite(STEP_PIN, LOW);
   }
}

это вырезанная для наглядности .
только прерывания на port С на pin D8..D13

#define ENABLE_PIN  8
#define limit1    9               //

#define mosfet     6             // mosfet и датчик бумаги

void setup(){                
  Serial.begin(115200);
  pinMode(ENABLE_PIN , OUTPUT);
  pinMode(9, INPUT_PULLUP);
  pinMode(6, OUTPUT);
  
  PCIFR=PCIF2; PCICR=1<<PCIE2;               //разрешить прерывание 
  PCMSK0=1<<PCINT1;                        // вход на котором сработает прерывание D9 limit
  PCMSK0=1<<PCINT2;                        // вход на котором сработает прерывание D10
  }
 
volatile uint8_t state = 0;
const int STEP_PIN = 4;
const int DIR_PIN = 7;

ISR(PCINT2_vect){}
          
    
  ISR (PCINT0_vect) {               // Обработчик запросов прерывания от пинов D8..D13
  static char statePrev=0;                           //предыдущее состояние энкодера
  static char statePrevPrev=0;                       //пред-предыдущее состояние энкодера
    char stateCur = 0;
    if(!(PINB & (1 << PB1))){stateCur  = 1;}         //опрос фазы 1 энкодера
}
	
void loop() { 
  if(!(PINB & (1 << PB1))) { // Изменился D9
    state = 1; // вкл. mosfet
	digitalWrite(mosfet, state);
	digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, LOW);
	    for (int i = 0; i < 2600; i++) {           //дистация отьезда от коцевика        
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(70);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);      
     }
    }
}

Это зачем???
Как такое может работать?

Вы что, не читаете, что вам пишут?

как вы советовали # 610

#622

Уже третий раз об этом говорю.

на печать уходит с макс. скоростью джойстика .
быстрее чем было и меня бы это устроило . если бы это работало
при подходе к головки . начинается печать и стол не останавливается . просто мимо проезжает к выходу .
я сейчас проверю работу в отдельной функции сделать .
void Joi()

  1. Взять последний рабочий код без джойстика.
  2. Добавить в него функцию джойстика, что была раньше, когда он работал.
  3. Убедиться, что добавление функции джойстика портит работу основной части, т.е. печать.
  4. В функции джойстика сделать так
  1. Убедиться, что печать снова работает нормально(или нет).
    Джойстик при этом уже не трогаем.

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

я примерно знаю вчем дело .
я писал об этом . месяц назад
причина в прерывании порта D
мой пор как то влияет на соседний так как в нем общие регистры для всех портов вроде 1
PCIFR=PCIF2; PCICR=1<<PCIE2;
джойстик можно вернуть вроде как добавить в каждый блок
motorPos++
тогда все ездило но джойстик превращается в кнопку вперед назад с одинаковой максимальной скоростью .

if (A < 520) {
      T = map(A, 520, 0, 520, 0);                 // 500, 0); шкала перерасчета 
      digitalWrite(7, 0);
      digitalWrite(ENABLE_PIN, LOW);
      digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
	   motorPos++
    }

Последняя моя попытка, извините

я так ранее пробовал мне без переменной в функции это не сделать

Троллите что- ли? А выше строчкой что, не переменная?

Спойлер

вернулся к старому варианту
с джойстиком печать работает но при использовании джойстика нужно держать кнопку 5
не хочет мой loop дружить с A0

//Энкодер на пинах 2, 3. Используется внутренняя подтяжка.
// volatile int enc, motor_position;
  int16_t enc, motorPos; 
  float Kmotor = 0.2945; //ПОДБИРАЕМ СООТНОШЕНИЕ МОТОР/ЭНКОДЕР


#define ENABLE_PIN  8
#define limitPin1    9
#define limitPin    10
#define button1   12
#define button2     5
#define mosfet     6             // mosfet и датчик бумаги
#define ww2     A0 


void setup(){                
  Serial.begin(115200);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(ENABLE_PIN , OUTPUT);
  pinMode(5, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(6, OUTPUT);
  pinMode(A0,INPUT_PULLUP);
  digitalWrite(ENABLE_PIN, 0); //пока включим драйвер на постоянку, чтобы не было пропусков

  PCIFR=PCIF2; PCICR=1<<PCIE2;               //разрешить прерывание
  PCMSK2=1<<PCINT18 | 1<<PCINT19;            //выбрать вход на котором сработает прерывание 
}






const int STEP_PIN = 4;
const int DIR_PIN = 7;
const int R360 = 600;                         //шагов на полный оборот
int knopka=0;
byte flag =0;
int T = 1;
int A = 560;



ISR(PCINT2_vect){
  static char EncPrev=0;                           //предыдущее состояние энкодера
  static char EncPrevPrev=0;                       //пред-предыдущее состояние энкодера
    char EncCur = 0;
    if(!(PIND & (1 << PD2))){EncCur  = 1;}         //опрос фазы 1 энкодера
    if(!(PIND & (1 << PD3))){ EncCur |= 2;}        //опрос фазы 2 энкодера

    if(EncCur != EncPrev)                          //если состояние изменилось,
    { if(EncPrev == 3 &&                             //если предыдущее состояние 3
          EncCur != EncPrevPrev )                      //и текущее и пред-предыдущее не равны,
      { 
        if(EncCur == 2) 
            enc++;
            
          else                          
            enc--;      
      }
   
      EncPrevPrev = EncPrev;                           //сохранение пред-предыдущего состояния
      EncPrev = EncCur;                                //сохранение предыдущего состояния
    }
}



void Step(bool Dir) //шаг в + или -
{
  if(Dir) {digitalWrite(DIR_PIN,0); motorPos++; } else {digitalWrite(DIR_PIN,1); motorPos--; } //направление шага
  //делаем шаг:
  
  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(1);
  digitalWrite(STEP_PIN, LOW);
}


  void Step(){                           //  joystick
    if (analogRead(A0) > 650) {
      T = map(analogRead(A0), 650, 1048, 100, 0);
      digitalWrite(7, 1);
      digitalWrite(ENABLE_PIN, LOW);
      
      digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);

    }
    if (analogRead(A0) < 480) {
      T = map(analogRead(A0), 480, 0, 100, 0);                 // 500, 0); шкала перерасчета 
      digitalWrite(7, 0);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);

    }
}




void loop() {
  // Мотор следит за энкодером:
  int16_t deltaPos = enc-((int16_t) motorPos * Kmotor);
  if(deltaPos>=  1) Step(1); // надо делать шаг +
  if(deltaPos<= -1) Step(0); // надо делать шаг -

    
  if (digitalRead(5)==LOW && flag==0) {Step();flag=1;}
    if (digitalRead(5)==LOW) {flag=0;}      
   
      
    if(digitalRead(12)==LOW&&knopka==0){
      digitalWrite(ENABLE_PIN, HIGH);
       delay(50);
       knopka++;
       digitalWrite(6, !digitalRead(6));   // вкл. или откл  mosfet и датчик бумаги
       }
       if(digitalRead(12)==HIGH&&knopka==1){
       knopka=0;
     }
    



   if (!digitalRead(9)) {	                      //pin коцевика задий
      digitalWrite(6, HIGH);                     // включим датчик бумаги
       digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, LOW);
	    for (int i = 0; i < 2600; i++) {           //дистация отьезда от коцевика        
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(70);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      
      }     
      enc =0 ;
      motorPos = 0 ;
    }


   if (!digitalRead(10)) {	                      //pin коцевика передий
      digitalWrite(6, LOW);                        // отключим датчик бумаги
       digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, HIGH);
	    for (int i = 0; i < 1200; i++) {           //дистация отьезда от коцевика     
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(500);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      }
      enc =0 ;
      motorPos = 0 ;
    }  
                          
    
}

Спойлер
void Step(){                           //  joystick
    if (analogRead(A0) > 650) {
      T = map(analogRead(A0), 650, 1048, 100, 0);
      digitalWrite(7, 1);
      digitalWrite(ENABLE_PIN, LOW);
      
      digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);

    }
    if (analogRead(A0) < 480) {
      T = map(analogRead(A0), 480, 0, 100, 0);                 // 500, 0); шкала перерасчета 
      digitalWrite(7, 0);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);

    }
}

Охренеть! 4 раза аналогрид делаете. Да ещё в луп 3-4 цикла.
Энкодер ждать не будет

Вот так сделайте: сначала с analogRead(), а А= 550 закоментируйте, а потом analogRead() закоментируйте, а А= 550 раскоментируйте

Спойлер
 void Step(){ 
 // int16_t A = analogRead(A0);//или какой там у вас пин
    A = 550;                      
    if (A > 650) {
      T = map(A, 650, 1048, 100, 0);
      digitalWrite(7, 1);
      digitalWrite(ENABLE_PIN, LOW);
      
      digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, HIGH);
       delayMicroseconds(T);
       digitalWrite(STEP_PIN, LOW);
       delayMicroseconds(T);

    }

И, зачем вам 2 функции с одинаковым именем? Компилятор-то разберётся…