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

grande...immaginavo fosse una cavolata ma non mi veniva...non sono un esperto programmatore...
posto il codice, accetto consigli per ottimizzare il codice:

#include <Servo.h>
Servo s3;
long tempo;
int modalita=0;

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<4) { tempo=tempo+500;
      if (tempo>10000) { modalita=0;}
      Serial.print( " modalita: " );
      Serial.println( modalita );
    }
    if (r<4) { tempo=tempo+500;
      if (tempo>4000 && tempo<6000) { modalita=1;}
      Serial.print( " modalita: " );
      Serial.println( modalita );
    }
    if (r<4) { tempo=tempo+500;
      if (tempo>2000 && tempo<4000) { modalita=2;}
      Serial.print( " modalita: " );
      Serial.println( modalita );
    }
        
    if (r>4) { tempo=0;}
   
   switch (modalita) {
     case 0:
       s3.write(90);
       break;
     
     case 1:
       if (r>4  && r<20) { s3.write(0) ; }
       if (r>20 && r<30) { s3.write(45)  ; }
       if (r>30)         { s3.write(90)  ; }
       break;
     
     case 2:
       if (r>4  && r<20) { s3.write(90) ; }
       if (r>20 && r<30) { s3.write(135)  ; }
       if (r>30)         { s3.write(180)  ; }
       break;
   } 
   delay(500); 
  }
}