Problema con una rutina para brazo robótico usando switch case

Hola.
Lo que quiero hacer es que al presionar un pulsador y usando switch case, me haga el cambio de rutina (una para controlar el brazo con Joysticks y la otra se mueva de forma "automática").
Mi problema es que el brazo se queda en la rutina "automata ()" y no deja seleccionar la que sigue, es como si dejara de comunicarse con la placa Arduino hasta que termina la rutina automata () y solo deja un espacio de unos mili segundos en el que puede mandar información al monitor serial y recibir la señal del pulsador siendo que en la rutina de los Joysticks puedo presionar el botón y cambia sin problemas a "default".
De verdad no sé qué es lo que está mal con el programa, estoy usando una placa Arduino UNO y alimento los servos independientemente (con su respectivo común).
Ojalá puedan resolver mi duda.

#include <Servo.h>

const int servo1 = 5;
const int servo2 = 6;
const int servo3 = 7;
const int servo4 = 9;

const int joy1 = A0;
const int joy2 = A1;
const int joy3 = A2;
const int joy4 = A3;

int servoVal;

int bstate = 0;

Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;

void setup() {

  pinMode(13, INPUT_PULLUP);

  myservo1.attach(servo1);
  myservo2.attach(servo2);
  myservo3.attach(servo3);
  myservo4.attach(servo4);

  Serial.begin(9600);
}


void loop() {

  Serial.println(bstate);

  if (digitalRead (13) == 0) {

    bstate = (bstate + 1) % 3;
    delay(5000);
  }

  switch (bstate) {
    
    case 1:

    automata();
    
    break;

    case 2:
    servoVal = analogRead(joy1);
    servoVal = map(servoVal, 0, 1023, 0, 180);

    myservo1.write(servoVal);

    servoVal = analogRead(joy2);
    servoVal = map(servoVal, 0, 1023, 0, 180);

    myservo2.write(servoVal);

    servoVal = analogRead(joy3);
    servoVal = map(servoVal, 0, 1023, 0, 180);

    myservo3.write(servoVal);

    servoVal = analogRead(joy4);
    servoVal = map(servoVal, 0, 1023, 0, 180);

    myservo4.write(servoVal);
    break;

    default:
    
    myservo4.write(0);
    myservo3.write(160);
    myservo2.write(50);
    myservo1.write(90);
    
  }
 }


 void automata(){
    myservo1.write(10);
    delay(1000);

    myservo2.write(120);
    myservo3.write(90);
    delay(1000);

    myservo4.write(30);
    delay(1000);

    myservo2.write(90);
    myservo3.write(150);
    delay(1000);

    myservo1.write(160);
    delay(1000);

    myservo4.write(0);
    delay(1000);
 }

Tu problema es que automata demora 6 segundos en prestarle atención a alguna otra cosa!!!
mira tu código, tienes 6 delays de 1000 mseg cada uno.
Cuando haces algo asi y mas con un brazo que debe moverse según ordenes no puedes usar delay.

Ve a documentación y mira como se usan las Máquinas de Estado.