Lanzallamas se queda bloqueado (Solucionado)

Que tal así?
pruebalo esto debe funcionar

#include <Servo.h> 

Servo myservo;

const byte buttonPin = 2;
bool buttonState, anterior;
const byte relay = 9;
unsigned long t1;
byte estado;

void setup() 
{ 
  myservo.attach(5);
  pinMode(buttonPin, INPUT);       
  pinMode(relay, OUTPUT);
} 

void loop() 
{ 
  buttonState = digitalRead(buttonPin);
  
  if (buttonState) {      
      if(!anterior)
        estado=1;
      }

  else 
    estado=0;     
anterior=buttonState;
      
        switch (estado) {
            case 1:
             digitalWrite(relay, HIGH);
             t1=millis();
             estado=2; 
              break;

            case 2:
            if(millis()-t1 >= 3000UL){
               myservo.write(90);
               estado=3; 
               t1=millis();
               }
              break;

             case 3:
              if(millis()-t1>= 2000UL){
              digitalWrite(relay, LOW);
               }
             break;

            default:
            myservo.write(0);
            digitalWrite(relay, LOW);
        }
}