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);
}
}