problema comando motore

Salve a tutti spero di aver caricato bene il mio post, sono nuovo sto usando arduino mega 2560, ho un problema, leggo un encoder correttamente e stampo su un display, ma se nel loop lascio la chiamata stampa il motore passo passo va a scatti e molto lento, se la cancello il motore va bene. C è qualche soluzione? ho provato anche a terminare prima il posizionamento tramite un if a movimento concluso stampare su display il valore dell encoder, e comunque il motore non va liscio come dovrebbe. C è un altro sistema?
grazie a tutti ragazzi

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <Wire.h>
#include "Timer.h"  
//lettura encoder
int encoderPin1 = 18;
int encoderPin2 = 19;
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
//lettura encoder
#include <AccelStepper.h>
AccelStepper stepper1(AccelStepper::DRIVER,2,3);
unsigned long tempo=0;
  
void setup() {
lcd.begin();
TCCR3B = TCCR3B & B11111000 | B00000001;

pinMode(encoderPin1, INPUT);
pinMode(encoderPin2, INPUT);
digitalWrite(encoderPin1, HIGH);
digitalWrite(encoderPin2, HIGH); 
attachInterrupt(4, updateEncoder, CHANGE);
attachInterrupt(5, updateEncoder, CHANGE);

stepper1.setMaxSpeed(3000.0);
stepper1.setAcceleration(1000.0);}



void loop() {

stepper1.moveTo(12000);
 stepper1.run();
 stampa();
  
}


void updateEncoder(){
  int MSB = digitalRead(encoderPin1); //MSB = most significant bit
  int LSB = digitalRead(encoderPin2); //LSB = least significant bit
int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
int sum  = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;
lastEncoded = encoded;}




void stampa(){
    
  lcd.setCursor(0,1);
  lcd.print("Posiz encoder =");
  lcd.setCursor(14,1);
 lcd.print(encoderValue);
if (encoderValue<10000){
   lcd.setCursor(18,1);
   lcd.print(" ");}
 if (encoderValue<1000){
   lcd.setCursor(17,1);
   lcd.print(" ");}
    if (encoderValue<100){
   lcd.setCursor(16,1);
   lcd.print(" ");}
   if(encoderValue<10){
    lcd.setCursor(15,1);
    lcd.print(" ");
    lcd.setCursor(14,1);
    lcd.print(encoderValue); }
}

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

grazie mi sono presentato come da regolamento.
Credo di aver risolto con il non chiamare la funzione stampa(); quando sono in un if che fa partire il motore e ci resto con la funzione return. all uscita fermo il motore e richiamo stampa(); L unica pecca è non avere il display che aggiorna l avanzare dell encoder.