Sustituir delay por millis al usar un buzzer

Saludos.

Estoy trabajando en este codigo, con el que al presionar un boton
compara 2 sensores, si la respuesta de ambos es igual, enciende un led verde y el buzzer emite un sonido y contabiliza de 1 en 1 en la pantalla lcd.

si la respuesta de uno de los 2 es diferente se enciende un led rojo y el buzzer emite un sonido diferente. Pero esto no se contabiliza.

Todo esto al presionar el boton Start.
Al presionar reset la contabilizacion vuelve a 0.

Quiero hacer uso de millis en lugar de delay para el patron de sonido de los tonos en el buzzer , pero no consigo hacer que el buzzer funcione con millis.

En el codigo solo hice el cambio para la 1ra condicion de " Valor de sensores iguales" como prueba.

Dejo una imagen del circuito por si esto resulta mas claro.

*Los sensores los estoy emulando con los switches.

Agradezo mucho de antemano cualquier ayuda.

#include <LiquidCrystal.h>

LiquidCrystal lcd(10,9, A0,A1,A2,A3);

int Switch(2);//
int Sensor(3);
int Verde=(4);//Led Verde
int Rojo=(5);//Led Rojo
int Boton=(6);//Boton de start
int Bocina(8);//Buzzer
int Reset(7);//Boton de reset


int Switchst;
int Sens;
int Botonst;
int Resetst;
int N=0;

unsigned long Time1=0;
unsigned long Time2=0;
unsigned long Time3=0;

void setup(){
  
pinMode(Switch,INPUT);
pinMode(Sensor,INPUT);
pinMode(Verde,OUTPUT);
pinMode(Rojo,OUTPUT);
pinMode(Boton,INPUT);
pinMode(Reset,INPUT);
pinMode(Bocina,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
  
lcd.begin(16, 2);
lcd.setCursor(3,0);
lcd.print("BIENVENIDO");
delay(500);
lcd.clear();
lcd.setCursor(6,0);
lcd.print("ATB");
delay(500);
lcd.clear();
  
}

void loop(){
lcd.setCursor(0,0);
lcd.print("CANTIDAD DE");
lcd.setCursor(0,1);
lcd.print("BOTONES:");
lcd.setCursor(10,1);
lcd.print(N);


Switchst=digitalRead(Switch);
Sens=digitalRead(Sensor);
Botonst=digitalRead(Boton);
Resetst=digitalRead(Reset);
  
  // Reset al contabilizador
  if(Resetst==HIGH){
    N=0;
    lcd.setCursor(10,1);
    lcd.print("   ");
  }   
   
// Valor de sensores iguales

  if(digitalRead(Boton)==LOW&&digitalRead(Switch)==HIGH&&digitalRead(Sensor)==HIGH){
    delay(100);  
  if(digitalRead(Boton)==HIGH&&digitalRead(Switch)==HIGH&&digitalRead(Sensor)==HIGH){
    digitalWrite(Verde,HIGH);
    
    if(millis()-Time1>=100){
      Time1=millis();
      tone(Bocina,1000);
    }
    if(millis()-Time2>=200){
    Time2= millis(); 
    noTone(Bocina);
    }
   if(millis()-Time3>=400){
    tone(Bocina,750);
    Time3=millis();
    N++;
    }  
  }
  }
 
  
 //Valor de sensores iguales
  if(digitalRead(Boton)==LOW&&digitalRead(Switch)==LOW&&digitalRead(Sensor)==LOW){
    delay(100);
  if(digitalRead(Boton)==HIGH&&digitalRead(Switch)==LOW&&digitalRead(Sensor)==LOW){
    digitalWrite(Verde,HIGH);
    tone(Bocina,1000);
    delay(100);
    noTone(Bocina);
    delay(200);
    tone(Bocina,750);
    delay(100);
    N++;
  }
  }else{
    digitalWrite(Verde,LOW);
    noTone(Bocina);
  }
  
  // Valor de sensores diferentes

   if(digitalRead(Boton)==LOW&&digitalRead(Switch)==LOW&&digitalRead(Sensor)==HIGH){
    delay(100);
  if(digitalRead(Boton)==HIGH&&digitalRead(Switch)==LOW&&digitalRead(Sensor)==HIGH){
    digitalWrite(Rojo,HIGH);
    tone(Bocina,500);
     delay(100);
    noTone(Bocina);
    delay(200);
    tone(Bocina,750);
    delay(100);
  } 
  }else{
   digitalWrite(Rojo,LOW);
  noTone(Bocina);
  }

    // Valor de sensores diferentes
   if(digitalRead(Boton)==LOW&&digitalRead(Switch)==HIGH&&digitalRead(Sensor)==LOW){
    delay(100);
  if(digitalRead(Boton)==HIGH&&digitalRead(Switch)==HIGH&&digitalRead(Sensor)==LOW){
     digitalWrite(Rojo,HIGH);
   tone(Bocina,500);
     delay(100);
    noTone(Bocina);
    delay(200);
    tone(Bocina,750);
    delay(100);
  }
  }else{
   digitalWrite(Rojo,LOW);
    noTone(Bocina);
  }
}

Hola...
Bueno primero:-si pusieras comentarios a tu código seria mas fácil comprender que quieres lograr.
2°.- El uso de millis() combinado con delay() es una aberración
3.- Esto:

tone(Bocina,1000);
    delay(100);
    noTone(Bocina);
    delay(200);

Lo podrías sustituir por esto:

tone(pin, frequency, duration);

tone(Bocina, 1000, 100);

Así el buzzer sonara solo el tiempo que le indiques en la función y evitas el uso de delay() y de noTone()

4.- Seria buena una explicacion mas amplia de lo que necesitas hacer con ese código, ya que no me queda del todo claro

Salu2

Muchas gracias por tu respuesta.

Ya he actualizado mi publicacion agregando algunos comentarios y mas detalles.

Probare lo que me comentas, si vi algunos ejemplos asi pero no me funcionaron,
supongo que porque seguia usando millis() y el noTone().