Leds con pulsadores

Buenas con todos, disculpen, necesito hacer un programa que cuando presione un boton A y luego de 5 segundos presione un botón B se encienda un led verde y si es cualquier otra combinación se encienda el led rojo.
Por ahora tengo este código, pero la verdad estoy muy confundida en cuanto a cómo podría escribir la condición para que pueda suceder el código.

int ledrojo = 12;
int ledverde=13;
int botonA = 11;
int botonB = 10;

void setup() {
  pinMode(ledrojo, OUTPUT);
  pinMode(ledverde, OUTPUT);
  pinMode(botonA, INPUT_PULLUP);
  pinMode(botonB, INPUT_PULLUP);
}

void loop() {
  if(digitalRead(botonA)==LOW)
  {
    delay(5000);
    
    if(digitalRead(botonB)==LOW)
    {
      digitalWrite(ledverde,HIGH);
    }
  }

}

Hola
¿Esta es tu tarea en la escuela?

Usando los valores de tu boceto... Aquí hay una "plantilla" que ayudará. Debes rellenar los espacios en blanco.

//// Declarar dispositivos y variables
int ledrojo  = 12;             // Declarar LED rojo
int ledverde = 13;             // Declarar LED verde
int botonA   = 11;             // Botón de declaración A
int botonB   = 10;             // Botón de declaración B
long tiempoA, tiempoB;         // Crear almacenamiento "signed" por botón horas
bool presionadoA, presionadoB; // Crear almacenamiento de "flag" para pulsaciones de botones

void setup() {
  //// Configurar dispositivos
  Serial.??(?????); // Iniciar la comunicación en serie
  pinMode(ledrojo , OUTPUT);     // pin de configuración para OUTPUT
  pinMode(ledverde, OUTPUT);     // 
  pinMode(botonA, INPUT_PULLUP); // configurar el pin para INPUT con resistencia PULLUP (activa LOW)
  pinMode(botonB, INPUT_PULLUP); // 
}

void loop() {
  //// Botón de lectura A
  if (??) {                    // Si no se presionó el botón...
    if (??) {                  // leer el botón... y si se presiona...
      tiempoA = ??;            // Tiempo de almacenamiento presionado
      presionadoA = ??;        // Establecer "flag" para el botón presionado
      Serial.println(millis(); // Mostrar tiempo pulsado
    }
  }

  //// Botón de lectura B
  if (??) {                    // Si no se presionó el botón...
    if (??) {                  // leer el botón... y si se presiona...
      tiempoB = ??;            // Tiempo de almacenamiento presionado
      presionadoB = ??;        // Establecer "flag" para el botón presionado
      Serial.println(millis(); // Mostrar tiempo pulsado
    }
  }


  if ((?? == ?) && (?? == ?)) {     // Botón de verificación presione "flags"
    if (?? - ?? > ????) {           // si la diferencia entre A y B es superior a 5 segundos
      digitalWrite(ledverde, HIGH); // ... verde si > 5 segundos
      Serial.println(?? - ??);      // Mostrar diferencia de tiempos de pulsación del botón
      Serial.println(":}");         // Mostrar resultados
    }
    else {
      digitalWrite(ledrojo, HIGH);  // ... rojo si no es 5 segundos o orden incorrecto
      Serial.println(abs(?? - ??)); // Mostrar diferencia absoluta
      Serial.println(":{");         // Mostrar resultados
    }

    Serial.println("Presione RESET");
    while (1); // Detente aquí. Presione el botón RESET
  }
}

Esto puede tener varias interpretaciones:

:one:
Se oprime el botón B antes de que transcurran 5 segundos desde que se oprimió el botón A

:two:
Se oprime el botón B después de que transcurrieron 5 segundos desde que se oprimió el botón A

:three:
Cuando transcurren exactamente 5 segundos desde que se oprimió el botón A se detecta que el botón B está siendo oprimido