Unir dos códigos

Hola comunidad. Disculpen la molestia.
Me estoy volviendo loco pero no sé como seguir. Tengo un código muy simple para un humanoide que estoy haciendo. Cuando detecta movimiento, te saluda con su brazo. Hasta acá todo bien. Probé un código por separado, para detectar sonido (tengo el módulo con MIC) y funciona perfecto. Con una palmada, el robot se pone a bailar (jajaja). El problema sucede cuando decido compilar ambos códigos JUNTOS en Arduino. No reporta ningún error y el ultrasonido sigue funcionando pero el MIC (palmada para que baile) no..

Conclusión..No sé que me falta para que el robot baile si detecta palmadas o te salude si te acercás. Por separado, ambos códigos funcionan bien pero cuando los fusiono, el de sonido no responde.

Les adjunto el código y agradeceré infinitamente a quien logre darme una mano

#include<Servo.h>
#define trigPin 10
#define echoPin 9
#define Xseg   200
const int pinBuzzer = 12;
const byte buttonpin  = 4;  // Define D0 Sensor as Interface
byte i        = 0;  // Contador de palmadas
bool val;
bool valAnt = false;    // define numeric variables val
bool activar    = false;
 Servo servoizq;
 Servo servoder;
 
 void setup ()
{
  Serial.begin (9600);
  servoizq.attach (7);
  servoder.attach (6);
  servoizq.write(0);
  servoder.write(45);
 
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
 pinMode(buttonpin,INPUT); // Define D0 Sensor as output Interface

}

void loop ()
{
 // COMANDOS ANTIGUOS PARA MOVER SERVOS INFINITAMENTE
  // servoizq.write (180);
  //servoder.write (135);
  //delay (2000);
 // servoizq.write (0);
 // servoder.write (0);
//  delay (2000);
val = digitalRead(buttonpin); // digital interface will be assigned a value of 3 to read val

  if (val && !valAnt && !activar)  { // Cuando hay un cambio de nivel incremento el contador
    i++;
    activar = true;
  }
  valAnt = val;

  if (activar) {
    switch(i) {
      case 1:   servoder.write(135); // Ajustar tiempos
                servoizq.write(180);
           delay(Xseg);
          break;
          
   case 2: servoder.write(45); // Ajustar tiempos
          delay(Xseg);
          servoizq.write(0);
          break;
      case 3: servoder.write(135);   // Ajustar tiempos
          delay(Xseg);
          servoizq.write(180);
          break;
      case 4: servoder.write(45); // Ajustar tiempos
          delay(Xseg);
          servoizq.write(0);
          break;
     
      default: i = 0;
          break;
    }
    activar = false;
  }
  
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 80) {
Serial.println("the distance is less than 80");
 tone(pinBuzzer, 440);
  delay(500);
  noTone(pinBuzzer);
   servoizq.write (180);
   delay(10000);
}
else {
servoizq.write (0);
noTone(pinBuzzer);
  delay(500);
}
if (distance > 60 || distance <= 0){
Serial.println("The distance is more than 60");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}

No tengo forma amble de decirlo, pero con cosas horribles como esta

delay(10000);

tu esperas que ALGO responda palmadas?

A ver piensa mas alla que copiaste los dos códigos.

Si algo detiene el microcontrolador por 10 segundos, a que palmada esperas que responda?

Ve a Documentación => Indice de temas tutoriales => millis()

Estudia millis() y luego conversamos.

Cada vez que pones delay() algo el micro se detiene y no hace nada... NADA!!
Si quieres que reaccione a cosas del exterior entonces no uses delay ni de 10 ni 100 o 10000 mseg.

Mil gracias por tu pronta respuesta.
El código no es copiado. Lo hice yo basándome en códigos básicos de movimientos de servos con ultrasonidos. Ese delay de 10 segundos, está a propósito ya que congela el brazo en el aire esperando un saludo y en dicho momento, no necesito que responda a otros estímulos. Además, solo accede a esos 10 segundos si detecta un objeto cercano pero en mi caso, no funciona directamente la parte del aplauso sin haber entrado en dicho modo de "pausa". Comprobé que el resto del código funciona perfecto. Solo se anula la parte del aplauso