On door open - Logic problem

So something like:

#define ECHO_PIN 8
#define TRIG_PIN 7
int RED_LED_PIN = 5;
int GREEN_LED_PIN = 6;

float readDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  int duration = pulseIn(ECHO_PIN, HIGH);
  return duration * 0.034 / 2;
}

void setup() {
  pinMode(ECHO_PIN, INPUT);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  static unsigned long timeCapture;

  if (!timeCapture && readDistance() <= 31) {
    timeCapture = millis();
  }

  if (readDistance() >= 30) {
    digitalWrite(RED_LED_PIN, HIGH);
    digitalWrite(GREEN_LED_PIN, LOW);
    timeCapture = 0;
  }
  
  if(timeCapture && (millis() - timeCapture) >= 4000) {
    digitalWrite(GREEN_LED_PIN, HIGH);
    digitalWrite(RED_LED_PIN, LOW);
    timeCapture = 1;
  }
}

?