problema millis() con 3 leds+sens distancias

Hola!
Tengo un pequeño problema al trabajar con millis() en lugar de “delay”
Los datos son los siguientes:
Arduino UNO
Sensor de distancia hc-sr04
Protoboard con 3 leds(rojo,amarillo,verde)

Según un rango de distancias se enciende un led, el problema es que cuando lo hago con millis(), muchas veces se queda encendido(o encendidos)el led, (creo que depende el estado en el que se encuentra cuando lee la distancia) y otras parpadea el led rojo cada segundo
Les paso el código a ver si alguien me puede decir dónde está el fallo.

Muchas gracias

Este es el código sin Delay

#define ECHO 11        // Pin para recibir el pulso de eco
#define TRIGGER 12     // Pin para enviar el pulso de disparo
 
unsigned int tiempo;
int distancia=0;
int corto=30; // Declara variable argumeto entero 
int medio=80;// Declara variable argumento entero
int largo=120; // Declara variagle argumento entero
long antes=0;//anterior actualización de tiempo
int rojo=7;
int pinR=LOW;
int amarillo=6;
int pinA=LOW;
int verde=5;
int pinV=LOW;
 
void setup() {
  
  pinMode(ECHO, INPUT);
  pinMode(TRIGGER, OUTPUT);
  pinMode(zumb,OUTPUT);
  pinMode(5,OUTPUT); // Led verde  
  pinMode(6,OUTPUT); // led amarillo
  pinMode(7,OUTPUT); // led rojo

} 
void loop(){
  digitalWrite(TRIGGER, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER, LOW);
  // Calcula la distancia midiendo el tiempo del estado alto del pin ECHO
  tiempo = pulseIn(ECHO, HIGH);
  // La velocidad del sonido es de 340m/s o 29 microsegundos por centimetro
  distancia= tiempo/58;
  //manda la distancia al monitor serie
 // monitoriza();
  unsigned long ahora=millis();//tiempo actual
  if(distancia<=10){// relación de distancia tiempo corto
     if (ahora-antes>corto){
     antes=ahora;
     if(pinR==LOW)
     pinR=HIGH;
     else
     pinR=LOW;
     digitalWrite(rojo,pinR);
     }
  }
  else if(distancia>=10&&distancia<=30){// relación de distancia tiempo medio
   if (ahora-antes>medio){
     antes=ahora;
     if(pinA==LOW)
     pinA=HIGH;
     else
     pinA=LOW;
     digitalWrite(amarillo,pinA);
     }
  }
  else if(distancia>=30&&distancia<=45){// relación de distancia tiempo largo
   if (ahora-antes>largo){
     antes=ahora;
     if(pinV==LOW)
     pinV=HIGH;
     else
     pinV=LOW;
     digitalWrite(verde,pinV);
     }
  }
  
}

y este es el código original con Delay, que funciona perfecto

#define ECHO 11        // Pin para recibir el pulso de eco
#define TRIGGER 12     // Pin para enviar el pulso de disparo
 
unsigned int tiempo;
int distancia=0;
int corto=30; // Declara variable argumeto entero 
int medio=80;// Declara variable argumento entero
int largo=120; // Declara variagle argumento entero


 
void setup() {
  
  pinMode(ECHO, INPUT);
  pinMode(TRIGGER, OUTPUT);
  pinMode(zumb,OUTPUT);
  pinMode(5,OUTPUT); // Led verde  
  pinMode(6,OUTPUT); // led amarillo
  pinMode(7,OUTPUT); // led rojo

} 
void loop(){
  digitalWrite(TRIGGER, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER, LOW);
  // Calcula la distancia midiendo el tiempo del estado alto del pin ECHO
  tiempo = pulseIn(ECHO, HIGH);
  // La velocidad del sonido es de 340m/s o 29 microsegundos por centimetro
  distancia= tiempo/58;
  //manda la distancia al monitor serie
  
  if(distancia<=10){// relación de distancia pito corto
  
  digitalWrite(7,HIGH); // enciende led rojo
  delay(corto); // zumbido corto nueva lectura
  digitalWrite(7,LOW);// apaga led rojo
  delay(corto);
  }
  else if(distancia>=10&&distancia<=30){// relación de distancia pito medio
  digitalWrite(6,HIGH);// enciende led amarillo
  delay(medio); // espera hasta nueva lectura
  digitalWrite(6,LOW);// apaga led amarillo
  delay(medio);
  }
  else if(distancia>=30&&distancia<=45){// relación de distancia pito largo
  digitalWrite(5,HIGH);// enciende led verde
  delay(largo); // espera hasta nueva lectura
  digitalWrite(5,LOW);// apaga led verde
  delay(largo);
  }
 }