Cambiar delay por millis, sensor HC-SR04

Hola, estoy realizando un proyecto, pero he topado con un pequeño inconveniente en el. Yo lo divido en 2 partes 1- Un led que se activa intermitentemente mediante un pulsador 2-Un sensor que de acuerdo a la distancia medida hace sonar un buzzer y un led a la misma frecuencia, y un led extra (led verde) como indicador de encendido.

El problema

Resulta que la frecuencia de intermitencia de los leds se ve afectada por el sensor ya que tiene unos delays para controlar la intermitencia del led y el buzzer, ya que hay que esperar a que se ejecuten las líneas de código del sensor entonces.. Me imagino yo que si esos delays se cambian por millis funcionará bien... O no sé si además tenga un error en mi código

Porqué si tengo una sugerencia no lo pruebo?

Problema 2 no sé muy bien como usar los millis en este caso :(

Quisiera que si es solo de cambiar los delays por millis me ayudarán con el código.

Gracias!

Prueba esto

#include <Ultrasonic.h>

Ultrasonic ultrasonic(8,9,30000); // (Trig PIN, Echo PIN, Time Out = 30000 us --> 5 metros m嫞.

const int buzzer  = 5;
const int LED_V   = 4; 
const int LED_R   = 3; 

int distancia;
int pausa;

const int backlights  = 6;
const int pulsador    = 7;           
bool estadoAC         = false;       // Estado actual del boton     
bool estadoAN         = false; //Variable para guardar el estado anterior del pulsador
bool estado_led       = false;
unsigned long tiempo_actual=0;
unsigned long tiempo_anterior=0;
int intervalo=100;
bool inicio=0;
byte estado = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LED_R, OUTPUT); 
  digitalWrite(LED_R, LOW); 
  pinMode(LED_V, OUTPUT);
  digitalWrite(LED_V, LOW);
  pinMode(buzzer, OUTPUT); 
  pinMode(backlights, OUTPUT);
  pinMode(pulsador, INPUT);
}

void loop() {

  estadoAC = digitalRead(pulsador);

  if (estadoAC && !estadoAN)
      estado_led = !estado_led;
  estadoAN = estadoAC;         

  if (estado_led == true) {     
      tiempo_actual = millis();
      if (tiempo_actual - tiempo_anterior >= intervalo){
          tiempo_anterior=tiempo_actual;
          inicio = !inicio;
      }
       
      if (inicio==true)
          digitalWrite(backlights, HIGH);
      else
          digitalWrite(backlights, LOW);                 
  }
  else
      digitalWrite(backlights,LOW);
  
  distancia = ultrasonic.Ranging(CM);
  Serial.println(distancia);

  digitalWrite(LED_V, HIGH); 
  if (distancia < 250 && distancia > 65) {// Si la distancia es inferior a 250 cm y mayor a 65cm
      pausa = distancia * 10;
      switch(estado) {
          case 0: digitalWrite(buzzer, HIGH);
                  digitalWrite(LED_R, HIGH);
                  estado = 1;
                  start = millis();
                  break;
          case 1: if (millis()-start > pausa) {
                      digitalWrite(buzzer, LOW);
                      digitalWrite(LED_R, LOW);       
                      estado = 2;
                      start = millis();
                  }
                  break;
          case 2: if (millis()-start > pausa) {
                      estado = 0; // a la espera del proximo
                  }
                  break;
      }
  }
}