Ayuda con Servomotor DS04-NFC y Pulsador

Buenos días,

Antes que nada, espero no romper ninguna regla del foro.

Me encuentro con el siguiente problema:

Estoy intentando hacer girar un servomotor DS04-NFC al pulsar un pulsador.

  • Al pulsar una vez quiero que gire durante cierto tiempo (5 seg, por ejemplo)
  • Al mantener apretado el pulsador que gire hasta que lo suelte.

Esto lo logre sin inconvenientes. El problema viene si mantengo apretado el pulsador durante un tiempo menor al que debe girar cuando pulso una vez. Es decir, si tengo programado que al “hacer un click” sobre el pulsador el servo debe girar durante 5 segundos, si yo mantengo apretado durante un tiempo menor a estos 5 segundos, el servo gira hasta completar el tiempo (debiendo frenar al soltar el pulsador).

Les dejo el código:

#include <Servo.h>

const int pinBoton = 4;
Servo servo;
int estadoActual = 0;
int estadoAnterior = 0;
unsigned long tiempoDeGiro = 5000;
unsigned long tiempoQueSePresionoElBoton;


void setup() {
  pinMode(pinBoton, INPUT);
  servo.attach(12);
  Serial.begin(9600);
}

void loop() {
  estadoActual = digitalRead(pinBoton);

  if (estadoActual) { //Si el pulsador esta pulsado
    tiempoQueSePresionoElBoton = millis();  //Me guardo el momento el tiempo en el que pulsador se pulso

    if (estadoActual == estadoAnterior) { //Si antes estaba pulsado y ahora se mantiene pulsado gira continuamente
      servo.write(180);
    } else {
      unsigned long tiempoAuxiliar = millis(); //Me guardo el momento de tiempo para llegar al tiempo de giro

      while (tiempoAuxiliar < (tiempoQueSePresionoElBoton + tiempoDeGiro)) { //Si el tiempo de giro sumado al tiempo en que se presiono el boton es menor al tiempo actual gira
        servo.write(180);
        tiempoAuxiliar = millis();
      }
      
      servo.write(90);

    }

    estadoAnterior = estadoActual; //actualizo el estado anterior

  } else {
    estadoAnterior = estadoActual;
    servo.write(90);
  }

}

Saludos y desde ya, muchas gracias