Separar medición ultrasonido de encendido LED

Hola!!

Soy nuevo con Arduino y estoy probando con 3 LEDs y 1 sensor de ultrasonido a encender un led de forma aleatoria y que se apague cuando me acerque al sensor.

El código que tengo funciona pero si no pongo "delay" las mediciones las hace tan rápidas que enciende todos los leds a la vez.

Pero cuando pongo el "delay(2000)" enciende los LEDs cada 2 segundos pero también hace las mediciones de distancia en esos 2 segundos.

He puesto el delay en mil sitios y siempre pasa igual.

¿Hay manera de hacer que los LEDs los encienda cada 2 segundos pero que las mediciones de distancia sean continuas?

Os dejo el código.

long randNumber;
int ledBlanco = 2;
int ledRojo = 3;
int ledAzul = 4;
#define trigPin 10
#define echoPin 9
long duracion, distancia;

void setup() {

  Serial.begin(9600);
  pinMode(ledBlanco, OUTPUT);
  pinMode(ledRojo, OUTPUT);
  pinMode(ledAzul, OUTPUT);
  randomSeed(analogRead(0));
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
 
  digitalWrite(trigPin, LOW);    
  delayMicroseconds(2);           
  digitalWrite(trigPin, HIGH);    
  delayMicroseconds(10);          
  digitalWrite(trigPin, LOW);     
    
  duracion = pulseIn(echoPin, HIGH);
  distancia = (duracion/2)/29;
  Serial.println(String(distancia) + " cm.") ;

  randNumber = random(2,5);
  Serial.println(randNumber);

  digitalWrite (randNumber, HIGH);
  
  if (distancia <= 10) {
    digitalWrite(randNumber, LOW);
  }
}

Gracias.

Se supone que deberías de usar millis() en lugar de delay() y una máquina de estados. Pero no es trivial. En la consulta alarma temporizada en un mismo led al presionar un botón explico (más o menos) cómo hacerlo para el problema que plantean. Es bastante larga la explicación y no sé si te servirá.

Ten en cuenta que la medición de la distancia has de hacerla tal cual la haces ahora, usando la función delayMicroseconds(). De todas formas, viendo el código que has puesto y las explicaciones de lo que quieres hacer, no me ha quedado del todo claro qué es lo que quieres. Cada dos segundos se ha de encender aleatoriamente un LED... ¿y los otros permanecen encendidos o se han de apagar? ¿Puede repetirse o sería preferible que fuera uno diferente cada vez? ¿Y cuando te acercas se han de apagar todos? ¿Y si vuelves a alejarte se vuelve a encender el último encendido o tiene que ser uno aleatorio? ¿Y si se encienden de nuevo una vez que te alejas, ha de hacerlo inmediatamente o pasado los dos segundos?

Le echaré un ojo a milis(), gracias.

Te contesto ya que no me he explicado muy bien.

Cada dos segundos se ha de encender aleatoriamente un LED... ¿y los otros permanecen encendidos o se han de apagar?

La idea es que cuando se encienda un led se apague al acercarse... en caso de que pasen 2 segundos y no se haya acercado al sensor se encienda otro LED permaneciendo los 2 encendidos.

¿Puede repetirse o sería preferible que fuera uno diferente cada vez?

Puede repetirse

¿Y cuando te acercas se han de apagar todos?

Sí.

¿Y si vuelves a alejarte se vuelve a encender el último encendido o tiene que ser uno aleatorio?

Tiene que ser uno aleatorio

¿Y si se encienden de nuevo una vez que te alejas, ha de hacerlo inmediatamente o pasado los dos segundos?

Pasados los 2 segundos

Conseguido con millis()

Muchas gracias!!!!