E' possibile usare un sensore di prossimità come switch di elenco istruzioni?

ok, sono andato avanti con il mio codice e ho trovato una soluzione "forse spartana" per ottenere quello che desideravo, ve lo posto per intero così ci capiamo meglio:

#include <Servo.h>
Servo s3;
long tempo;

int triggerPort = 10;
int echoPort = 11;

void setup() {
  s3.attach(3,500,3000); 
  pinMode( triggerPort, OUTPUT );
  pinMode( echoPort, INPUT );
  Serial.begin( 9600 );
  Serial.println( "Sensore ultrasuoni: ");
  }

void loop() {
  
  //porta bassa l'uscita del trigger
  digitalWrite( triggerPort, LOW );
  
  //invia un impulso di 10microsec su trigger
  digitalWrite( triggerPort, HIGH );
  delayMicroseconds( 10 );
  digitalWrite( triggerPort, LOW );
  
  long duration = pulseIn( echoPort, HIGH );
  long r = 0.034 * duration / 2;
  
  Serial.print( tempo );
  Serial.print( " durata: " );
  Serial.print( duration );
  Serial.print( " , " );
  Serial.print( "distanza: " );
  
  //dopo 38ms è fuori dalla portata del sensore
  if( duration > 38000 ) Serial.println( "fuori portata");
  else {
    Serial.print( r ); Serial.println( "cm" );
    if (r==1) 
    {
      tempo=tempo+500;  
        if (tempo>3000) {
          s3.write(90);
        }
    }

    if (r==4) {
      tempo=tempo+500;
        if (tempo>3000) {   
           if (r>4  && r<20)  { s3.write(170) ; }
           if (r>20 && r<30)  { s3.write(80)  ; }
           if (r>30)              { s3.write(10)  ; }
        }
    }
  if (r!=1 && r!=4) { tempo=0; }
  delay(500);
  }
}

Intanto le impostazioni del sensore e l'assegnazione del servo sono ok.
Dunque così come l'ho impostato il tempo mi viene registrato correttamente o meglio se la distanza è uguale a 1cm (modalità A) o a 4cm (modalità B) inizia il count del tempo altrimenti verrà settato a 0;
ciò che non riesco a capire è come far mantenere sempre lo stesso ciclo di istruzioni nel caso si entri nella modalità A o B.

Scusate se non riesco ad essere chiaro.