Mover un servo a 2 posiciones distintas con un boton

He estado trabajando en un proyecto y quisiera saber si es posible mover un Servomotor a 2 posiciones distintas usando un Arduino UNO y un boton final de carrera, hasta el momento puedo hacer que haga un giro de 180º pero no puedo hacer que regrese.

Hasta el momento tengo esto de código:

//Proyecto servo
#include <Servo.h>

Servo myservo;

  const int buttonPin = 2;
    int buttonState = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  myservo.attach(9); //Cable amarillo pin 9
}

void loop()
{
buttonState  = digitalRead(buttonPin);
if (buttonPin == HIGH)
{
    myservo.write(180);
}
else
{
  myservo.write(0);
}
}

Deberías darle el tiempo para que llegue a una posición y luego darle la orden para que haga la contraria.
Si usas servo.read() puedes leer si llego a la posición deseada y entonces darle la nueva orden o medir cuanto demora y entonces hacerlo.
Dices que ese código no funciona?
El microswitch final de carrera al ponerse en high debe enviar el servo a 180 grados y eso debería ser suficiente y cuando se liberá debería regresarlo y dices que no lo hace?

Tu error pero no olvides editar el código como te pedí por privado

buttonState  = digitalRead(buttonPin);
if (buttonState  == HIGH) {  // debe decir buttonState y no buttonPin
    myservo.write(180);
}
else {
  myservo.write(0);
}

surbyte:
...
Si usas servo.read() puedes leer si llego a la posición deseada y entonces ...

No es correcto, servo.read solo devuelve el valor del último servo.write no hay feedback de la posición real del motor, lo que tarde en llegar o que este clavado en otra posición o sin alimentación al motor queda fuera del control de servo.read

Tienes razón!! revisé y estaba equivocado.