Mostrar en LCD velocidad y sentido motor paso a paso

Copiando códigos he conseguido que un motor paso a paso (descarte impresora), manejado a través de un Arduino Uno y un EasyDriver mostrara en una LCD 20x4 los cambios de velocidad efectuados por un potenciómetro cómo así el sentido de rotación (o parada) activado por interruptores. Cómo soy lego en estas lides quisiera saber si es perfectible para hacerlo más preciso y/o eficiente. Desde ya muchas gracias. He puesto un video en YouTube.

// Modificación de código para agregar LCD 20x4 display (controlado por I2C) del
// Example5 code for Brian Schmalz's Easy Driver Example
// http://www.schmalzhaus.com/EasyDriver/EasyDriverExamples.html
// Stepper motor: unipolar Sanyo 103-546 as bipolar 1,8 deg/step (200 steps 1 rev)(from old printer)
// CAP 20/11/2018

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

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

// Define the stepper and the pins it will use
AccelStepper stepper1(AccelStepper::DRIVER, 9, 8);

// Define our three input button pins
#define  LEFT_PIN  4
#define  STOP_PIN  3
#define  RIGHT_PIN 2

// Define our analog pot input pin
#define  SPEED_PIN 0

// Define our maximum and minimum speed in steps per second (scale pot to these)
#define  MAX_SPEED 1600              // to be modified in function of stepper kind
#define  MIN_SPEED 0.1

void setup() {
  // The only AccelStepper value we have to set here is the max speeed, which is higher than we'll ever go 
  stepper1.setMaxSpeed(10000.0);
  
  // Set up the three button inputs, with pullups
  pinMode(LEFT_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(RIGHT_PIN, INPUT_PULLUP);

  lcd.begin(20,4); //initialize the lcd
  lcd.clear();
  lcd.setCursor(3, 0);                   // Move the cursor to 4th position on 1st line
  lcd.print("  Sanyo 180");
  lcd.setCursor(0, 1);                   // Move the cursor to 1th position on 2nd line
  lcd.print("Rot:");
  lcd.setCursor(0, 2);                   // Move the cursor to 1th position on 3rd line
  lcd.print("Speed RPM:");
  lcd.setCursor(15,3);                   // Move the cursor to 16th position on 4th line
  lcd.print("CAP");                      // as usual myself
    
}

void loop() {
  static float current_speed = 0.0;         // Holds current motor speed in steps/second
  static int analog_read_counter = 1000;    // Counts down to 0 to fire analog read
  static char sign = 0;                     // Holds -1, 1 or 0 to turn the motor on/off and control direction
  static int analog_value = 0;              // Holds raw analog value.
  
  // If a switch is pushed down (low), set the sign value appropriately
  if (digitalRead(LEFT_PIN) == 0) {
    sign = 1;
    lcd.setCursor(7, 1);                   // Move the cursor to 6th position on 2nd line
    lcd.print("<<CCW<<");                  // Print CW direction

  }
  else if (digitalRead(RIGHT_PIN) == 0) {    
    sign = -1;
    lcd.setCursor(7, 1);                   // Move the cursor to 6th position on 2nd line
    lcd.print(">>>CW>>");                  // Print CW direction

  }
  else if (digitalRead(STOP_PIN) == 0) {
    sign = 0;
    lcd.setCursor(7, 1);                   // Move the cursor to 6th position on 2nd line
    lcd.print("Stopped");                  // Print Stopped
  }

  // We only want to read the pot every so often (because it takes a long time we don't
  // want to do it every time through the main loop).  
  if (analog_read_counter > 0) {
    analog_read_counter--;
  }
  else {
    analog_read_counter = 3000;
    // Now read the pot (from 0 to 1023)
    analog_value = analogRead(SPEED_PIN);
    // Give the stepper a chance to step if it needs to
    stepper1.runSpeed();
    //  And scale the pot's value from min to max speeds
    current_speed = sign * (((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED);
    // Update the stepper to run at this new speed
    stepper1.setSpeed(current_speed);
    float velo = (current_speed/20*6);     // value '20' to be modified by stepper kind (steps seconds for 1 rev x 60")
    lcd.setCursor(12, 2);
    lcd.print(String(velo,0)+"  ");
    }

  // This will run the stepper at a constant speed
     stepper1.runSpeed();
}

Disculpen Ustedes, pero no estoy acostumbrado a trabajar en estos temas de editar en internet.

No sé si las entendería todavía, ni sé si las podría llevar a cabo todavía. Estoy estudiando en los ratos libres programación de Arduino. No me interesa avanzar más en este proyecto. La idea final es hacer una plataforma giratoria de locomotoras para ferromodelismo escala HO, dado que las que he visto en la web, aún las hechas con Arduino no me satisfacen (y probablemente lo hecho aquí me sirva poco). De este proyecto todavía debo resolver cómo, sin perder la velocidad de respuesta del programa, el último dígito mostrado en el LCD no varíe tan ostensiblemente. Lo cual espero conseguir tarde o temprano (estudios mediante).
Subí este porque pensé que quizá la sea útil a alguién que pueda darle (también quizá) un mejor uso.
Sí alguién me hiciera una pregunta sobre el video subido trataría de contestarle lo posible dentro de mis conocimientos (el copy & paste no fué tan fácil para hacer que funcionara cómo lo hace, y no todo fué "copy & paste")
Obviamente el código es perfectible por alguién ducho en programación, y seguramente no necesitará este sketch, ni siquiera lo mirará.
Mi abuelo (italiano) tenía un dicho: "piano piano si va lontano" (despecito despacito se llega lejos).
Agradezco todas y cada una de las indicaciones que me han dado. Cordiales saludos

Ok. En el video se ve un stepper moviendose en sentido CW y luego CCW con un par de pulsadores para controlar la velocidad y visualización en LCD I2C

Perfectible para lograr que no consigues ahora?

Hola. Gracias por su comprensión. Tal cómo se ve en el video, depende de la posición del potenciómetro que regula la velocidad de rotación, para que el LCD, dónde muestra esa velocidad no titile.
Los pulsadores son tres, los que Ud. indica más el de parado ("Stopped"). Ya estoy trabajando en eso. Cordiales saludos.

He reemplazado los 3 botones del circuito por un control infrarrojo. Funciona perfectamente. ¿Es posible reemplazar el potenciometro por uno digital (tengo un módulo x9c103) para controlar la velocidad también por IR? ¿Hay algún inconveniente técnico? Gracias por vuestra ayuda.

Mas simple sería que tu IR use dos teclas, uno sube y otro baja el seteo que deseas.

Imagna que usaras un control REMOTO y las teclas VOL+ y VOL- pues bien, configurar que cada vez que reconozcas VOL+ suba un contador y por lo tanto hacer las veces de un potenciometro.
Y vice versa con el VOL-
Te gusta la idea?

Ok. Gracias por el consejo. Iremos por ese camino entonces.