problema con librerie -u8glib- ed -accelstepper...

Salve a tutti,
ho iniziato a fare delle prove con i motori passo passo ma,come da post, ho un problema (credo) con le librerie su indicate in quanto, se abilito la funzione : u8g.firstPage(); i motori girano molto piano , come se esistesse un delay.
Se invece “salto” questa istruzione i motori girano come indicato nelle loro istruzioni.

Ho provato a fare ricerche in rete ma non ho trovato indicazioni al riguardo, il che mi fa pensare che sia proprio una mia svista , ma che non riesco a risolvere.

Spero possiate gentilmente darmi qualche suggerimento. Grazie.

PS.
Il monitor LCD 12864 è collegato in seriale ai pin TX1 - TX2 ( riproduce tutti i dati che gli invio).
Utilizzo Arduino Mega 2560 v.3
Drive a4988
allego sketch:

#include <core_build_options.h>

#include "U8glib.h"

U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);

#include <Wire.h>      // Comes with Arduino IDE

#include <AccelStepper.h>

int motorAccel = 20000; //steps/second/second to accelerate
AccelStepper stepper1(1, 53, 51);  ///stepper1(1, StepPin, DirPin); l' -1- indica l'uso di un Driver es: a4988

const int btnInPosiz = 31;
const int btnTaglia = 33;

const int btnSelect = 35;
const int btnUp = 37;
const int btnDown = 39;

const int ledPin= 22;

int statoBtnSelect=LOW;
int lastBtnSelect=LOW;
int statoElRifSelect=LOW;

int statoBtnUp =LOW;
int lastBtnUp =LOW; 
int statoElRifBtnUp =LOW;

int statoBtnDown = LOW;
int lastBtnDown = LOW;
int statoElRifBtnDown = LOW;




int modVel= 0;

int statoBtnTa = 0;
int lastBtnTa =LOW; 
int statoRifBtnTa =LOW;


int statoBtnInPos =0;
int lastBtnInPos =LOW; 
int statoRifBtnInPos =LOW;

int El_Rif_Taglia=LOW;
int El_Rif_InPos=LOW;
int ElFasi=0;          ///elemento ulitizzato per contare il numero di processi ed attivare il successiovo con nuovi parametri velocità e Step...
int impSel=0;


void setup(){
 

 
 
 pinMode (btnTaglia, INPUT);
 pinMode (btnInPosiz, INPUT);
 pinMode (ledPin, OUTPUT);
 
 pinMode (btnSelect, INPUT);
 pinMode (btnUp, INPUT);
 pinMode(btnDown, INPUT);

}
                                    /////////////////  LOOP  ////////////////////////////
                                    
void loop(){


 
 
// /*  
 
u8g.firstPage();                            /////// FUNZIONE SCRITTURA FONT SU  LCD 12864 -   ////////////
  do {
   // u8g.setFont(u8g_font_unifont);      //  6x12      (u8g_font_6x10)   lucasfont_alternate     fixed_v0
   
 
u8g.setFont(u8g_font_6x12);
//u8g.setFont(u8g_font_unifont);//  courB12    unifont

    u8g.drawStr(0, 10, "CordaMax");
    //u8g.drawStr(48, 10, ":");
    u8g.drawStr(82, 10, "Min");
    //u8g.drawStr(100, 10, ":");

    u8g.drawStr(0, 22, "Margine Ant.Post.");
    //u8g.drawStr(100, 22, ":");  
    
    u8g.drawStr(0, 34, "Corda Max Dx");
    u8g.drawStr(92, 34, "Sx");
    //u8g.drawStr(72, 34, ":");  
    //u8g.drawStr(104,34,":");
    
    
    u8g.drawStr(0, 48, "Num.Passi x 1mm.");
    //u8g.drawStr(94, 48, ":");
    u8g.drawStr(0, 60, "Velocita' Max");  
    //u8g.drawStr(84,60,":");
  
                                               
 
    
 }                                                
    while( u8g.nextPage() );   //////////CHIUSURA CICLO PRINT  U8GLIB //////////////////
                                            
 // */
                             /////////////////////////////  FASE  UNO  -  MOTORI AVANTI   ///////////////////////////////////////////////
                           
  statoBtnInPos = digitalRead(btnInPosiz); 
if (statoBtnInPos != lastBtnInPos && statoBtnInPos == HIGH) {
     statoRifBtnInPos = !statoRifBtnInPos;
    
     if (statoRifBtnInPos == HIGH && ElFasi==0) {
      modVel=300; 
      int motorSpeed = modVel;
 stepper1.setMaxSpeed(motorSpeed);
 stepper1.setSpeed(motorSpeed);
 stepper1.setAcceleration(motorAccel);
      
       El_Rif_InPos=HIGH;
       digitalWrite (ledPin, HIGH);
      
      
}else{
 //modVel=0;
  El_Rif_InPos=LOW;
  digitalWrite (ledPin, LOW);
  }}
  lastBtnInPos = statoBtnInPos;
// delay (20);
if (El_Rif_InPos==HIGH) {
  
 stepper1.moveTo(-1000);
 stepper1.run();

if (stepper1.distanceToGo() == 0){ 
El_Rif_InPos= LOW;
digitalWrite (ledPin, LOW);
stepper1.setCurrentPosition (0);
ElFasi=1;
}
}
 //////////////////////////////////////////////////// FASE 2    MOTORI    INDIETRO  
 
 statoBtnTa = digitalRead(btnTaglia); 
if (statoBtnTa != lastBtnTa && statoBtnTa == HIGH) {
     statoRifBtnTa = !statoRifBtnTa;
    
     if (statoRifBtnTa == HIGH) {
      
       El_Rif_Taglia=HIGH;
       digitalWrite (ledPin, HIGH);      
}
else{
 
  El_Rif_Taglia=LOW;
  digitalWrite (ledPin, LOW);
  }}
  lastBtnTa = statoBtnTa;


///////////////////////////////////////////////////////////

if (El_Rif_Taglia==HIGH && ElFasi==1) {
  
   modVel=500; 
      int motorSpeed = modVel;
 stepper1.setMaxSpeed(motorSpeed);
 stepper1.setSpeed(motorSpeed);
 stepper1.setAcceleration(motorAccel);
 
 stepper1.moveTo(1000);
 stepper1.run();

if (stepper1.distanceToGo() == 0){ 
stepper1.setCurrentPosition (0);
ElFasi=2;
}}


/////////////////////////////////////////////////////////////
if (El_Rif_Taglia==HIGH && ElFasi==2) {
//El_Rif_Avanti= HIGH;
//digitalWrite (ledPin, HIGH);
 modVel=200; 
      int motorSpeed = modVel;
 stepper1.setMaxSpeed(motorSpeed);
 stepper1.setSpeed(motorSpeed);
 stepper1.setAcceleration(motorAccel);
 
 stepper1.moveTo(1000);
 stepper1.run();
 if (stepper1.distanceToGo() == 0){ 
 El_Rif_Taglia= LOW;
digitalWrite (ledPin, LOW);
stepper1.setCurrentPosition (0);
ElFasi=0;
}
}
    }

Salve,
spero di aver risolto…

…pensando che fosse il ciclo “do - while” a creare problemi, ho pensato di racchiudere tutto cio’ che riguradava la gestione del monitor in una funzione “if” creando inoltre una variabile " CicloMotoreAtt" che resta attiva sino a quando tutte le istruzioni inerenti il funzionamento del motore non sono terminate.
Vista la mia poca esperienza non so’ se esiste un altro modo, forse più elegante, per risolvere il problema, ma al momento il tutto sembra funzionare …
Allego lo sketch ( un po’ ripulito) così che se anche altri dovessero avere il mio stesso problema…

Un saluto a tutti , Giuseppe

#include <core_build_options.h>

#include "U8glib.h"

U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);

#include <Wire.h>     
#include <AccelStepper.h>

int motorAccel = 20000; //steps/second/second to accelerate
AccelStepper stepper1(1, 3, 2);  ///stepper1(1, StepPin, DirPin); l' -1- indica l'uso di un Driver es: a4988


const int btnTaglia = 33;
const int ledPin= 22;
int modVel= 0;
int statoBtnTa = 0;
int lastBtnTa =LOW; 
int statoRifBtnTa =LOW;
int CicloMotoreAtt=LOW;                  //// CONTROLLA CHE TUTTI I CICLI DEL FUNZIONAMENTO MOTORE  SIANO TERMINATI ////////////

int El_Rif_Taglia=LOW;

int ElFasi=0;          ///elemento ulitizzato per contare il numero di processi ed attivare il successiovo con nuovi parametri velocità e Step...




void setup(){
  
 pinMode (btnTaglia, INPUT);
 pinMode (ledPin, OUTPUT);
 }
                                    /////////////////  LOOP  ////////////////////////////
                                    
void loop(){


 
 
if (CicloMotoreAtt==LOW) {
 
u8g.firstPage();                            /////// FUNZIONE SCRITTURA FONT SU  LCD 12864 -   ////////////
  do {
  
 
u8g.setFont(u8g_font_6x12);
    
    u8g.drawStr(0, 48, "Num.Passi x 1mm.");
    //u8g.drawStr(94, 48, ":");
    u8g.drawStr(0, 60, "Velocita' Max");  
    //u8g.drawStr(84,60,":");
 }                                                
    while( u8g.nextPage() );   //////////CHIUSURA CICLO PRINT  U8GLIB //////////////////
                                            }
 
 
  //////////////////////////////////////////////////// FASE     MOTORI   ////////////////////// 
 
 statoBtnTa = digitalRead(btnTaglia); 
if (statoBtnTa != lastBtnTa && statoBtnTa == HIGH) {
     statoRifBtnTa = !statoRifBtnTa;
    
     if (statoRifBtnTa == HIGH) {
      CicloMotoreAtt=HIGH;                              //////////  ATTIVO IL CICLO DEL FUNZIONAMENTO MOTORI ///////////
       El_Rif_Taglia=HIGH;
       digitalWrite (ledPin, HIGH);      
}
else{
 
  El_Rif_Taglia=LOW;
  digitalWrite (ledPin, LOW);
  CicloMotoreAtt=LOW;
  }}
  lastBtnTa = statoBtnTa;


///////////////////////////////////////////////////////////

if (El_Rif_Taglia==HIGH && ElFasi==0) {
  
   modVel=500; 
      int motorSpeed = modVel;
 stepper1.setMaxSpeed(motorSpeed);
 stepper1.setSpeed(motorSpeed);
 stepper1.setAcceleration(motorAccel);
 
 stepper1.moveTo(1000);
 stepper1.run();

if (stepper1.distanceToGo() == 0){ 
stepper1.setCurrentPosition (0);
ElFasi=1;
}}


/////////////////////////////////////////////////////////////
if (El_Rif_Taglia==HIGH && ElFasi==1) {
//El_Rif_Avanti= HIGH;
//digitalWrite (ledPin, HIGH);
 modVel=200; 
      int motorSpeed = modVel;
 stepper1.setMaxSpeed(motorSpeed);
 stepper1.setSpeed(motorSpeed);
 stepper1.setAcceleration(motorAccel);
 
 stepper1.moveTo(1000);
 stepper1.run();
 if (stepper1.distanceToGo() == 0){ 
 El_Rif_Taglia= LOW;
digitalWrite (ledPin, LOW);
stepper1.setCurrentPosition (0);
ElFasi=0;
CicloMotoreAtt=LOW;                                          //////////   CHIUDO FASE ATTIVITA  MOTORE   ///////////
}
}
    }

Salve, scusatemi se ripropongo il mio quesito...

ma, stavo pensando che in questo modo però , se volessi integrare un aspetto grafico ,es: una linea o cursore che avanza in relazione al movimento dei motori, non potrei farlo...

Ecco che quindi sono nuovamente a chiederVi se conoscete un modo di evitare il mio problema e far funzionare le due cose insieme ed eventualmente quale funzione dovrei andare ad approfondire....

Un grazie in anticipo