Non aspettare che giri il servo motore

Salve a tutti, innanzitutto questo è il codice:

//HC RS04 Sensore ultrasuoni
#include <Servo.h>

Servo myServo;
int triggerPort = 9;
int echoPort = 10;
int notes[] = {349};
int speaker = 13;
int temp= A0;
int blu = 15;
const int sensorPin = A0;
const float baselineTemp = 20.0;
int switchState = 0;
//millis/
unsigned long previousMillis = 0;
unsigned long interval= 10;
unsigned long previousMillis2 =0;
unsigned long interval2=10;
unsigned int counter = 0;
//millis

//motore//

const int switchPin2 = 6; // the number of the switch pin
const int motorPin2 =  8; // the number of the motor pin
int switchState2 = 0;

const int buttonOrario = 19;
const int buttonAntior = 7;
const int potPin = A1;
const int in1Pin = 17;
const int in2Pin = 18;
const int motorPin = 16;

long previousMillis3 = 0;
long interval3 = 200;

unsigned long previousMillis5 = 0;        // will store last time LED was updated

// constants won't change :
const long interval5 = 1;

 
int potVal = 0;
int bora = LOW;
int bant = LOW;
//motore//

#include <LiquidCrystal.h>//includo lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int pos = 0;
 
void setup() {

  
  
  myServo.attach(15);
  
  //motore
    pinMode(motorPin2, OUTPUT);      
  // initialize the switch pin as an input:
  pinMode(switchPin2, INPUT);
  
  pinMode(buttonOrario, INPUT);
  pinMode(buttonAntior, INPUT);
  pinMode(potPin, INPUT);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(motorPin, OUTPUT);
 
  digitalWrite(in1Pin,bora);
  digitalWrite(in2Pin,bant);
  analogWrite(motorPin, 0);
  //motore
 
pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
pinMode( speaker, OUTPUT);
pinMode(temp, INPUT);
pinMode(blu, OUTPUT);
Serial.begin( 9600 );
Serial.println( "Sensore ultrasuoni: ");
lcd.begin(16,2);
 
}
 
void loop() {

  
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
      //motore
        switchState2 = digitalRead(switchPin2);

  // check if the switch is pressed.
  if (switchState2 == HIGH) {     
    // turn motor on:    
    digitalWrite(motorPin2, HIGH);  
  } 
  else {
    // turn motor off:
    digitalWrite(motorPin2, LOW); 
  }       
      bora = digitalRead( buttonOrario);
  bant = digitalRead( buttonAntior);
  potVal = map(analogRead(potPin), 0, 1023, 0, 255);
 
  analogWrite(motorPin, 255);
 
  if (bora == HIGH && bant == HIGH)
  {
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,LOW);
  }
 
  digitalWrite(in1Pin,bora);
  digitalWrite(in2Pin,bant);
  
  
  }
  //FINE MOTORE
  
  
  
  //temp
   int sensorVal = analogRead(sensorPin);
   float voltage = (sensorVal/1024.0) * 5.0;
   float temp = (voltage - .5) *100;
   if (temp>20){
     digitalWrite(blu, HIGH);}
     else{digitalWrite(blu, LOW);} 
  
  
  //temp
    

//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( "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" );
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(r);
lcd.setCursor(0,1);
lcd.print(temp);

//DISPLAY





//DISPLAY


if(r<=50){
    unsigned long currentMillis5 = millis();
  if(currentMillis5 - previousMillis5 > interval5) {
previousMillis5 = currentMillis5;
  tone(speaker, 350);
  delay(1000);
  noTone(speaker);
  delay(1000);
  }
    
  
  
  digitalWrite(motorPin2, LOW);
  
  
  for(pos = 85; pos < 179; pos +=1)
  {
    myServo.write(pos);
    delay(50);
    }
    for(pos = 179; pos < 1; pos -=1)
   {
    myServo.write(pos);
    delay(50);
   }
  for(pos = 1; pos < 85; pos +=1)
 {
  myServo.write(pos);
 delay(50);
} 



  
}
else{noTone(speaker);
digitalWrite(motorPin2, HIGH);}
}

il problema sta in quest’ultime righe, ovvero vorrei che quando r è minore di 50, il buzzer emetta un beep ogni secondo e che il servo motore vada da 85 a 179 e poi da 179 a 1 e da 1 a 85, come se si giri per guardarsi intorno, una sola volta e non infinte volte, solo che quando arduino esegue il codice, il programma si ferma fino a quando il servo non ha finito di compiere le sue zioni e questo mi crea un grosso problema. qualcuno mi puo aiutare?

Scusa ma non è il servo ad aspettare, sei tu che metti dei comandi delay()
Questi comandi bloccano il micro, lo mettono in attesa.
Dovresti rimpiazzarli con la millis(), ma non è molto facile. Una cosa è il blink di un led con delay() e poi farlo usando la millis() (vedi esempio BlinkWithoutDelay) nel tuo codice un pò più complesso.

Quindi potresti aiutarmi nel codice?

Qualcuno mi può aiutare?

Nessuno?

Il codice è scritto cosi, solo che non funziona, si blocca tutto se la distanza è minore di 50, il servo gira e l’audio si ferma e le informazioni non compaiono più in tempo reale fino a quando il servo non hai finot id girare completamente
(ultima parte del codice: if r<50…)