insetar una pausa ante un evento, y que no afecte el resto del programa

hola! buenas tardes!!
Estoy modificando un termostato para lograr un amperimetro con arduino UNO.
el tema es que cuando llega por ejemplo a 3 amper, haga sonar un buzer y active un rele durante 300 milisegundos.
despues de ese tiempo, que desactive los 2 dispositivos.
el tema es que lo tengo echo ya, pero cuando tengo el delay y genero un corto circuito en la salida, a veces tarda en cortar. por los 300 milisegundos.
la idea es que lo haga inmediatamente. que detecte el corto siempre sin retraso.
este es el codigo.
(aclaro, que era de un termostato, y lo modifique. por eso dice “temp” de temperatura)

 if(temp>set)
  {
    digitalWrite(10,HIGH);
    digitalWrite(9,HIGH);
    digitalWrite(8,LOW);
  //        (aca iria el delay, que es cuando detecta cierto nivel en el pin A0, pero si pongo "delay" me 
              retrasa la deteccion de sobrecorriente )
   
  } else if(set-temp<1 && temp<set)
  {
    digitalWrite(10,LOW);
    digitalWrite(9,LOW);
    digitalWrite(8,HIGH);
    lcd.setCursor(15,1);
    lcd.print(" ");
    
  }

desde ya, muchas gracias a quien pueda ayudarme!

Para eso debes utilizar la función millis() y no delay. En los ejemplos de Arduino hay uno en donde utilizan millis() se llama BlinkwithoutDelay, lo encuentras en ejemplos>digital>BlinkwithoutDelay. Este ejemplo te muestra una forma de poder colocar retardos sin que el micro se detenga. De igual forma acá te coloco el código.

// constants won't change. Used here to set a pin number:
const int ledPin =  LED_BUILTIN;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

También tienes un tutorial en la Sección documentación => Indice de temas tutoriales => millis()