Cronómetro dentro de un ciclo while

Hola amigos.

En estos tiempos de cuarentena, me encuentro experimentando con una placa de arduino MEGA, un motor paso a paso y algunos otros componentes. Ya he conseguido hacer andar el motor, por un cierto periodo de tiempo y controlar el sentido de giro, con un botón.
Últimamente se me ocurrió mostrar por pantalla el tiempo que lleva en funcionamiento, pero no lo he podido lograr. He buscado por varios lados, he leído sobre la función millis(); y he probado algunos códigos que he encontrado en internet, pero no me resulta, el tiempo solo se actualiza en pantalla cada vez que presiono el botón de cambio de sentido. ¿Alguien podría ayudarme con esto?

Este es el código que tengo:

#include "U8glib.h"  // librería U8glib para Nokia LCD
#include <AccelStepper.h>  // librería para control del motor

// Configuración de U8glib para Nokia LCD
#define backlight_pin 38
U8GLIB_PCD8544 u8g(2, 3, 6, 5, 7); // Arduino pins connected to Nokia pins:
                                     // CLK=2, DIN=3, CE=6, DC=5, RST=7
                                                                  
#define steps 42
#define direccion 44
#define motorInterfaceType 1
#define boton 46 
#define enable 39

AccelStepper stepper = AccelStepper(motorInterfaceType, steps, direccion);

unsigned long comienzo;
unsigned long termino;
int fin = 0;
unsigned long tAnterior;
unsigned long tiemposegundos;

#define STEPS 200
int tiempo = 25; // segundos
int velocidad = 300; // pasos por segundos

void setup() {

  Serial.begin(9600);

  stepper.setMaxSpeed(800);
  digitalWrite(enable, HIGH);    // Desactiva el chip A4988
  pinMode(boton, INPUT);
  
}
void loop(){

  comienzo = millis();
  termino = comienzo + (tiempo*1000);
        
  while ((millis() <= termino) and fin == 0){
    
    digitalWrite(enable, LOW);    // Activa el chip A4988

    while (digitalRead(boton) == LOW){

      stepper.setSpeed(-velocidad);
      stepper.runSpeed();

      if (millis() > termino){
        stepper.stop();
      break;
      }      
    }
    while (digitalRead(boton) == HIGH){
     
      stepper.setSpeed(velocidad);
      stepper.runSpeed();
      
      if (millis() > termino){
        stepper.stop();
      break;
      }
    }
    tiemposegundos = millis()/1000;
    
    u8g.firstPage();
    do {
    u8g.setFont(u8g_font_profont11);
    u8g.drawStr(0, 10, "Tiempo:");
    u8g.setPrintPos(44, 10);
    u8g.print(tiemposegundos);
    }
      while( u8g.nextPage() );
      
   if (millis() > termino){
    fin = fin + 1;
    break;
      }
  }
}

Tienes un pulsador o un switch? Te pregunto porque haces un loop (while) para LOW y otro para HIGH y eso es raro.

Hola surbyte, gracias por tu respuesta. Efectivamente, estoy usando pulsadores para producir el cambio de dirección del giro del motor, todo esto para un controlador a4899. Mi idea, es hacer una mesa oscilante.
Intenté controlar el movimiento con un ciclo for, indicándole la cantidad de pasos, pero se me presentó el problema de pérdida de posición, pues en la partida gira algunos pasos antes de entrar al ciclo while que limita el tiempo de funcionamiento. Por lo anterior, se me ocurrió poner dos pulsadores, actuando como terminales de carrera, conectados como interruptor para escaleras. Así, el movimiento queda restringido dentro de una distancia fija.

Bueno y, como lo del movimiento con los ciclos while y pulsadores me funcionó, me sentí alentado para seguir sumando componentes. Le agregué una pantalla Nokia 5110, para mostrar el tiempo que lleva en funcionamiento. Pero hasta allí llegó mi suerte y no he podido hacer que esto funcione. El tiempo solo se actualiza cuando uno de los pulsadores es presionado y no segundo a segundo.

Post data. Soy nuevo en este mundo de arduino, te pido no me odies por las soluciones muy torpes que se me hayan ocurrido.

Tu código es un poco desastroso (por eso se me dificulta un poco analizarlo con detalle) pero todos empezamos así en la programación, no te desanimes y ¡bienvenido al mundo de arduino!
Tal vez tu problema se solucione si pones "comienzo = millis();" dentro del setup ya que lo que se encuentra dentro de esta función solo se ejecuta una vez (cuando el arduino arranca). Si tienes eso dentro de la función loop (como es en este caso) se estará restableciendo el valor de la variable "comienzo" cada vez que el programa pase por esa parte ya que el loop es una función que ejecuta infinitas veces los que tiene dentro.