problema al variar la velocidad de un servo

Hola espero q me puedan ayudar. Estoy haciendo una maquina que cocina deferentes platos con comida. La maquina electrónicamente consta de un arduino mega 2056, una pantalla nextion 5", un 8 relay module, 3 servos, 2 sensores (un fin carrera, y un foto interruptor). la pantalla tiene su propia fuente, así como los servos y al arduino lo alimento con 9v. Como dato adicional el arduino funciona con el timer de la nextion. Por medio de la cual se inician diferentes platos, siendo estos platos secuencias basadas en el timer de la nextion).
El problema está en que un servomotor llamado SERVOBRAZO tiene que moverse lentamente entre dos posiciones GUARDADO y EXTENDIDO. pero este solo se mueve lenta mente o correctamente si la orden ----moverServo(SERVOBRAZO, EXTENDIDO, 45);— se encuentra directamente dentro del if( transcurrido == xx)., como se observa la línea de código lo tengo comentado en el transcurrido == 5 ) o también funciona correctamente en el void apagar() y en el void reanudar(). Pero incorrectamente o hace caso omiso al delay que controla la velocidad (se mueve rapido) si la orden se encuentra en el void revolver() o void pausar(). Como se ve en el código activo la variable rev=1 que se encuentra en el if ( transcurrido == 10 ) q a su vez la variable rev llama al void revolver().
Lo que he probado para resolver el problema es cambiar el delay(velocidad); dentro del void moverServo por microseconds() y por milis () pero no varía en nada.
Tengo dudas de conflicto de la librería servo.h con alguna librería pero no sé como despejarlas.
De antemano les agradezco su ayuda.
Habiendo expuesto mi problema adjunto el código.

codigo_pregunta_foro.ino (8.73 KB)

No debes poner el código como adjunto, debe estas en el propio mensaje entre las etiquetas de código. Por favor edita tu mensaje, gracias.

aqui adjunto el codigo, no me deja en el anterior post xq exede el numero de caracteres.

#include <Servo.h>
#include "Nextion.h"
#include <Wire.h> // libreria

void nporcionesPushCallback(void *ptr); //botones pantalla nextion 
void bsiguientePushCallback(void *ptr);
void biniciarPushCallback(void *ptr);
void tm0TimerCallback(void *ptr);
void bpausePushCallback(void *ptr);
void bpl1PushCallback(void *ptr);

#define REXTRACTOR  31     // se definen los pines donde se conectaran los reles (modulo 8 relees
#define RMOTOR  32
#define RCHISPA  33
#define RGAS  34
#define RBOMBA2  35
#define RBOMBA3  36
#define RBOMBA4  37
#define RREVOLVER  38

#define ON LOW
#define OFF HIGH

Servo SERVOGAS;
Servo SERVOVELOCIDAD;
Servo SERVOBRAZO; 

const int  SENSOR = 3;
const int  SENSORPALETA = 18;
int plato = 0, transcurrido = 0, sensorAct = 0, posServo = 50;
unsigned long time_now = 0;
//declarar todas las variables
NexButton bpl1 = NexButton(0, 2, "bpl1");
NexButton bpl2 = NexButton(0, 3, "bpl2");
NexButton bpl3 = NexButton(0, 4, "bpl3");
NexButton bpl4 = NexButton(0, 5, "bpl4");
NexButton bpl5 = NexButton(0, 6, "bpl5");
NexButton bpl6 = NexButton(0, 7, "bpl6");
NexButton bpl7 = NexButton(0, 8, "bpl7");
NexButton bpl8 = NexButton(0, 9, "bpl8");
NexButton bpl9 = NexButton(0, 10, "bpl9");
NexButton bpl10 = NexButton(0,11, "bpl110");
NexButton bpl11 = NexButton(0, 12, "bpl11");
NexTimer tm0 = NexTimer(2, 6, "tm0");


NexNumber nporciones = NexNumber(1, 1, "nporciones");
NexButton bsiguiente = NexButton(1, 5, "bsiguiente");

NexButton bpause = NexButton(2, 7, "bpause");
NexButton biniciar = NexButton(2, 8, "biniciar");
NexText tproceso = NexText(2, 1, "tproceso");
NexText tpaso = NexText(2, 3, "tpaso");
NexText ttiempo_total = NexText(2, 11, "ttiempo_total");
NexText ttiempo_paso = NexText(2, 10, "ttiempo_paso");

int APAGADO = 80, BAJO = 60, MEDIO = 50 , ALTO = 30;                 // VARIABLES SEVOS
int VDETENIDO = 0, VESTACIONAMIENTO = 40, VLENTA = 20, VMEDIA = 60,  VRAPIDA = 100;
int GUARDADO = 50,  EXTENDIDO = 116; 

int paro = 0, rev = 0,paleta = 0, contRev = 0, encendida = 0;

char buffer[100] = {0};
int tiempo = 40;
int tiempo1 = 20;
int estadoMotor = OFF, estadoVelocidad = VDETENIDO, estadoGas = APAGADO, estadoValvulaGas = OFF, estadoBomba2 = OFF,estadoBomba3 = OFF,estadoBomba4 = OFF,estadoRevolver = OFF ;

NexTouch *nex_listen_list[] =
{
&bpl1,
&bpl2,
&bpl3,
&bpl4,
&bpl5,
&bpl6,
&bpl7,
&bpl8,
&bpl9,
&bpl10,
&bpl11,
&nporciones,
&bsiguiente,
&tproceso,
&bpause,
&biniciar,
&tpaso,
&tm0,
NULL
};
void nporcionesPushCallback(void *ptr)
{
    //dbSerialPrintln("n0PopCallback");
    nporciones.setValue(1);
}
 void bsiguientePushCallback(void *ptr)
{
    uint32_t number;
    tproceso.setText("proceso");
}
void biniciarPushCallback(void *ptr)
{
    tpaso.setText("biniciar paso");
    if(!encendida) {
      encender();
      encendida = 1;
    }else{
      reanudar();
    }
    tm0.enable();

}
void bpausePushCallback(void *ptr)
{
    dbSerialPrintln("pausado");
    tm0.disable();
    pausar();
}
 void bpl2PushCallback(void *ptr)
{
    transcurrido = 0;
    plato= 1;           //VARIA SEGUN EL CASE
    tiempo=40;
}
 void tm0TimerCallback(void *ptr)
 {

   if(tiempo>0){
 
      switch(plato){
        case 1:  dbSerialPrintln(transcurrido);
                  if( transcurrido == 3 ) {

                  digitalWrite(RMOTOR, ON);
                  SERVOVELOCIDAD.write(VLENTA);
                  SERVOGAS.write(MEDIO);

                }
        if( transcurrido == 5 ) {

                  digitalWrite(RMOTOR, ON);
                  SERVOVELOCIDAD.write(VMEDIA);
                  //moverServo(SERVOBRAZO, EXTENDIDO, 45);  
                }
       if ( transcurrido == 10 ) {
                  rev=1;
                  attachInterrupt(digitalPinToInterrupt(SENSOR), fincarrera, RISING );
                }
                }

                break;
        case 2: break;
        default: break;
      }
      transcurrido++;
      tiempo--;
      char sttotal = secondsToString(tiempo);
      ttiempo_total.setText(&sttotal);
      dbSerialPrintln(digitalRead(SENSORPALETA));
   }else{
      apagar();
   }
}

void encender() {
  encendida=1;
  digitalWrite(RGAS, ON);
  SERVOGAS.write(BAJO);
  digitalWrite(REXTRACTOR, ON);
  prenderyapagar(RCHISPA, 2);

}

void revolver() {

    digitalWrite(RMOTOR, OFF);
    moverServo(SERVOBRAZO, EXTENDIDO, 45);
    delay (700); //delay espera servo posicione
    digitalWrite(RREVOLVER, ON);
}

void reiniciar() {
    digitalWrite(RREVOLVER, OFF);
    moverServo(SERVOBRAZO, GUARDADO, 45);
    pausa(1);
    digitalWrite(RMOTOR, ON);
    dbSerialPrintln("motor on");
}

void pausar() {
  //guardar variables
  estadoMotor = digitalRead(RMOTOR);
  estadoValvulaGas = digitalRead(RGAS);
  estadoBomba2 = digitalRead(RBOMBA2);
  estadoBomba3 = digitalRead(RBOMBA3);
  estadoBomba4 = digitalRead(RBOMBA4);
  estadoRevolver = digitalRead(RREVOLVER);
  estadoGas = SERVOGAS.read();
  //pausar
digitalWrite(RMOTOR, OFF);
digitalWrite(RGAS, OFF);
digitalWrite(RBOMBA2, OFF);
digitalWrite(RBOMBA3, OFF);
digitalWrite(RBOMBA4, OFF);
SERVOGAS.write(APAGADO);
SERVOVELOCIDAD.write(VDETENIDO);

rev=contRev=0;
if(estadoRevolver==0){
  attachInterrupt(digitalPinToInterrupt(SENSORPALETA), finpaleta, RISING );
}
}

void pausa(int t){
  for(int i=0; i<t; i++){
    delay(1000);
    transcurrido++;
    tiempo--;
    char sttotal = secondsToString(tiempo);
    ttiempo_total.setText(&sttotal);
  }
}

void reanudar(){
  digitalWrite(RMOTOR, estadoMotor);
  digitalWrite(RBOMBA2, estadoBomba2);
  digitalWrite(RBOMBA3, estadoBomba3);
  digitalWrite(RBOMBA4, estadoBomba4);
  //digitalWrite(RREVOLVER, estadoRevolver);
  digitalWrite(RGAS, estadoValvulaGas);
  SERVOGAS.write(estadoGas);
  prenderyapagar(RCHISPA, 2);
  SERVOVELOCIDAD.write(estadoVelocidad);
  if(estadoRevolver==0){
    moverServo(SERVOBRAZO, EXTENDIDO, 45);  
    delay (1000);
    digitalWrite(RREVOLVER, ON);
  }else{
    digitalWrite(RREVOLVER, estadoRevolver);
  }
}

void apagar() {
  encendida = 0;
  SERVOGAS.write(APAGADO);
  digitalWrite(REXTRACTOR, OFF);
  digitalWrite(RGAS, OFF);
  digitalWrite(RMOTOR, OFF);
 SERVOGAS.write(APAGADO);
 SERVOVELOCIDAD.write(VDETENIDO);
  moverServo(SERVOBRAZO, GUARDADO, 45);
}

void prenderyapagar(int pin, int tiempo) {
  digitalWrite(pin, ON);
  for(int i=0; i<tiempo; i++){
   pausa(1);
  }
  digitalWrite(pin, OFF);
  dbSerialPrintln("chispa on-off");
}


char secondsToString(int seconds)
{
      char buffer[5];
      sprintf(buffer, "%i:%i", seconds/60, seconds%60);
      return *buffer;
  }


void setup() {
Serial.begin(9600);
nexInit();  

  pinMode(REXTRACTOR, OUTPUT);
  pinMode(RMOTOR, OUTPUT);
  pinMode(RCHISPA, OUTPUT);
  pinMode(RGAS, OUTPUT);
  pinMode(RBOMBA2, OUTPUT);
  pinMode(RBOMBA3, OUTPUT);
  pinMode(RBOMBA3, OUTPUT);
  pinMode(RREVOLVER, OUTPUT);

  pinMode(PARO, INPUT);
  pinMode(SENSOR, INPUT);

  digitalWrite(REXTRACTOR,OFF);
  digitalWrite(RMOTOR,OFF);
  digitalWrite(RCHISPA,OFF);
  digitalWrite(RGAS,OFF);
  digitalWrite(RBOMBA2,OFF);
  digitalWrite(RBOMBA3,OFF);
  digitalWrite(RBOMBA4,OFF);
  digitalWrite(RREVOLVER,OFF);
  digitalWrite(BUZZER,LOW);

  SERVOGAS.attach(4);
  SERVOVELOCIDAD.attach(6);
  SERVOBRAZO.attach(8);

SERVOGAS.write(APAGADO);
SERVOVELOCIDAD.write(VDETENIDO);
SERVOBRAZO.write(GUARDADO);

    nporciones.attachPush(nporcionesPushCallback);
    bsiguiente.attachPush(bsiguientePushCallback);
    bpause.attachPush(bpausePushCallback);
    biniciar.attachPush( biniciarPushCallback);
    bpl2.attachPush( bpl2PushCallback);
    tm0.attachTimer(tm0TimerCallback);
 
}

void fincarrera(){
  dbSerialPrintln("sensor leido");
    if(rev){
        if(sensorAct==0){
            SERVOVELOCIDAD.write(VESTACIONAMIENTO);
        }
      sensorAct++;
    }
    if(sensorAct>3){
      //delay(500);
      sensorAct=0;
      rev=contRev=0;
      detachInterrupt(digitalPinToInterrupt(SENSOR));
      revolver();
    }
}

void finpaleta(){
  detachInterrupt(digitalPinToInterrupt(SENSORPALETA));
  digitalWrite(RREVOLVER, OFF); 
  moverServo(SERVOBRAZO, GUARDADO, 45); 
}

void moverServo(Servo servo, int fin, int velocidad) {
  int inicio = posServo;
  moverServo(servo, inicio, fin, velocidad);
}


void moverServo(Servo servo, int inicio, int fin, int velocidad) {
  if(inicio<fin){
    for(int pos=inicio; pos<=fin; pos++) {
        servo.write(pos);
        delay(velocidad);
    }  
  }else{
    for(int pos=inicio; pos>=fin; pos--) {
        servo.write(pos);
        delay(velocidad);

    }
  }
  posServo = fin;
}


void loop() {
  nexLoop(nex_listen_list);
  if(paro) {  // si se pulsa el boton de paro
    apagar();
  }

}

Kike_GL si la suma de cuerpo de mensaje y código supera 9000 caracteres el sistema no te permite postear el código. Yo mismo hice la prueba y aún editando el código para que tenga menos espacios no permitía hacerlo.

Es correcto lo que ha hecho.