EJECUTAR SIMULTANEAMENTE

HOLA NECESITO AYUDA
SOY ALGO NUEVO CON ESTO DEL MANEJO DE ARDUINO,TENGO UN PROBLEMA CON EL CODIGO,
CONSISTE EN QUE EL SENSOR ULTRASONICO DETECTE UNA DISTANCIA Y EMITA UNA VIBRACION Y UN SONIDO DEPENDIENDO DE ESTA
ADEMAS DE ELLO QUE SIMULTANEAMENTE SE MUEVA UN SERVOMOTOR SG90
PERO CUANDO EJECUTO EL PROGRAMA EL SERVOMOTOR SE MANTIENE EN MOVIMIENTO Y EL SENSOR DEJA DE DETECTAR LA DISTANCIA POR LO TANTO NO EMITE NI SONIDO NI VIBRACION HASTA QUE EL SERVO FINALICE LA FUNCION DADA
¿COMO PUEDO HACER PARA QUE TODO SE EJECUTE AL MISMO TIEMPO?? ADJUNTO EL CODIGO

#include "Ultrasonic.h" //Libreria del sonar
Ultrasonic ultrasonic(11,12); //Trigger, Echo
// Señal acustica
#include "pitches.h" //Libreria que contiene las notas musicales
int sonido = NOTE_A7; //Declaramos la nota musical elegida como el sonido
int sonar; //Declaramos la variable sonar

#include <Servo.h>
Servo myservo; // crea el objeto servo
int pos = 0; // posicion del servo

void setup()
{
//Serial.begin(9600); //inicio de la comunicacion serie a 9600 baudios
myservo.attach(8); // vincula el servo al pin digital 9
}

void loop()
{
sonar = ultrasonic.Ranging(CM); //Leemos la distancia del sonar

//La funcion ultrasonic.ranging(cm) viene declarada en la libreria del sonar
//Calcula la distancia a la que rebota una señal enviada basandose en el
//tiempo que tarda en recorrer dicha distancia, devolviendonos la distancia
//en centimetros, lista para utilizar en casos de medicion por ultrasonidos.

while (sonar < 50) //Mientras que la distancia sea menor a 60 cm
{
noTone(10); //Mantenemos el sonido apagado
delay(sonar10); //Delay dependiente del valor del sonar. Si la distancia se reduce
//el delay es menor y la señal acustica sonara con mayor frecuencia.
//Si la distancia aumenta, el delay aumenta, disminuyendo la frecuencia
//con la que suenan los pitidos.
tone(10, sonido); //Señal acustica de aviso
delay(sonar
10); //Delay para mantener la señal acustica 0,1 segundos minimo
noTone(10); //Apagamos el sonido

noTone(7); //Mantenemos el vibrador apagado
delay(sonar10); //Delay dependiente del valor del sonar. Si la distancia se reduce
//el delay es menor y la señal vibrara con mayor frecuencia.
//Si la distancia aumenta, el delay aumenta, disminuyendo la frecuencia
//con la que vibra.
tone(7,HIGH); //Señal vibracion de aviso
delay(sonar
10); //Delay para mantener la señal vibracion 0,1 segundos minimo
noTone(7); //Apagamos el vibrador

while (sonar <10) //Si la distancia del sonar es menor que 10 cm
{
tone(10, sonido); //Suena sin interrupciones indicando la proximidad del objeto
delay(150); //Delay para mantener la señal sonido 0,1 segundos minimo
noTone(10); //Apagamos el sonido

tone(7, HIGH); //vibra sin interrupciones indicando la proximidad del objeto
delay(100); //Delay para mantener la señal vibracion 0,1 segundos minimo
noTone(7); //Apagamos el vibrador
sonar = ultrasonic.Ranging(CM); //Distancia del sonar
}

sonar = ultrasonic.Ranging(CM); //Leemos la distancia del sonar para volver a empezar
}

{
//varia la posicion de 0 a 180, con esperas de 15ms
for (pos = 0; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}

//varia la posicion de 0 a 180, con esperas de 15ms
for (pos = 180; pos >= 0; pos -= 1)
{
myservo.write(pos);
delay(15);
}
}
}

una interrupcion
si no se puede
usa 2 arduinos nanos eso haria yo, estan baratos