Servo no regresa a la posicion inicial

Quiero hacer Un Alimentador de mascotas automatico con un servo un rtc y un lcd i2c todo funciona perfecto pero en la primera hora del codigo el servo gira a 90º pero no regresa a 0 despues del delay.. en cambio en las otras horas si funciona perfecto.. Quiero que funcione asi: A la Hora indicada El servo se mueve 90º espera 6 segundos y regresa a la posicion inicial 0º, asi funciona con todas las horas menos la primera. Ya nose que hacer ayudenme por favor

#include <Wire.h>
#include <RTClib.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>

RTC_DS3231 rtc;
Servo miServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Cambia la dirección I2C según la dirección real de tu LCD

bool servoMoved = false;
bool nextServoTimeDisplayed = false;
int nextServoHour = 22;
int nextServoMinute = 30;

void setup() {
  Serial.begin(9600);
  miServo.attach(3);
  lcd.init();  // Iniciar el LCD sin ningún argumento extra
  lcd.backlight();
  
  if (!rtc.begin()) {
    Serial.println("Modulo RTC no encontrado !");
    while (1);
  }
  
  lcd.setCursor(0, 0);
  lcd.print("Hora:");
  
  // Inicializa la segunda línea del LCD con la hora del próximo movimiento del servo
  lcd.setCursor(0, 1);
  lcd.print("Prox: ");
  lcd.print(twoDigits(nextServoHour));
  lcd.print(":");
  lcd.print(twoDigits(nextServoMinute));
}

void loop() {
  DateTime fecha = rtc.now();
  
  if ((fecha.hour() == nextServoHour && fecha.minute() == nextServoMinute) || (fecha.hour() >= nextServoHour && servoMoved)) {
    if (fecha.hour() == 22 && fecha.minute() == 30) {
      moveServo(90);
      delay(6000);
      moveServo(0);
      delay(3000);
    } else {
      servoMoved = false; // Establece la bandera en falso antes de mover el servo
      moveServo(90);
      delay(6000);
      moveServo(0);
      delay(3000);
    }
    calculateNextServoTime();
  }
  
  // Muestra la hora actual en la primera línea del LCD
  printTimeOnLCD(fecha.hour(), fecha.minute(), fecha.second());

  // Si el servo se ha movido y la hora del próximo movimiento del servo aún no se ha mostrado
  if (servoMoved && !nextServoTimeDisplayed) {
    // Muestra "Prox: Hora del próximo movimiento del servo" en la segunda línea del LCD
    lcd.setCursor(0, 1);
    lcd.print("Prox: ");
    lcd.print(twoDigits(nextServoHour));
    lcd.print(":");
    lcd.print(twoDigits(nextServoMinute));
    nextServoTimeDisplayed = true;
  }

  // El resto del código sigue siendo el mismo...
}

void moveServo(int angle) {
  miServo.write(angle);
  delay(500);
}

void printTimeOnLCD(int currentHour, int currentMinute, int currentSecond) {
  lcd.setCursor(6, 0);
  lcd.print(twoDigits(currentHour));
  lcd.print(":");
  lcd.print(twoDigits(currentMinute));
  lcd.print(":");
  lcd.print(twoDigits(currentSecond));
}

String twoDigits(int number) {
  if (number < 10) {
    return "0" + String(number);
  } else {
    return String(number);
  }
}

void calculateNextServoTime() {
  if (nextServoMinute == 30) {
    nextServoMinute = 33;
  } else if (nextServoMinute == 33) {
    nextServoMinute = 35;
  } else if (nextServoMinute == 35) {
    nextServoMinute = 30;
    nextServoHour = 22;
    // Si el próximo movimiento del servo es después de la medianoche, ajusta la hora
    if (nextServoHour <= rtc.now().hour()) {
      nextServoHour = (nextServoHour + 24) % 24;
    }
  }
  servoMoved = false; // Restablece la bandera
  updateNextServoDisplay();
}

void updateNextServoDisplay() {
  lcd.setCursor(0, 1);
  lcd.print("Prox: ");
  lcd.print(twoDigits(nextServoHour));
  lcd.print(":");
  lcd.print(twoDigits(nextServoMinute));
  nextServoTimeDisplayed = false; // Restablece la bandera
}

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @taquitopro11.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Inicializa el servo a la posición de inicio.

void setup() {
  Serial.begin(9600);
  miServo.attach(3);
  miServo.write(0); // Se inicializa el servo a cero
  //
  //

Muchas gracias ya funciono