No se que hice mal con el codigo

No se que hice mal, el servo se vuelve loco y empieza a girar y hace bimmm f bimmm. El codigo es este:

#include <Servo.h>

Servo motor;

int valor, valor_antiguo, estado;
int pulsador = 4;


void setup() {

  motor.attach(6);
  Serial.begin(9600);
  pinMode(pulsador,INPUT);
}

void loop() {

  valor = digitalRead(pulsador);
  if((valor==HIGH)&&(valor_antiguo==LOW)){
    motor.write(90);     
      }
  else{
      motor.write(0);
      }



}

No tratar adecuadamente el "flag" "valor_antiguo". Prueba esto:

#include <Servo.h>
Servo motor;
int valor, valor_antiguo;
int pulsador = 4;
void setup() {
  motor.attach(6);
  Serial.begin(9600);
  pinMode(pulsador, INPUT);
}
void loop() {
  valor = digitalRead(pulsador);
  if ((valor == HIGH) && (valor_antiguo == LOW)) {
    motor.write(90);
    valor_antiguo = HIGH;
  }
  if ((valor == HIGH) && (valor_antiguo == HIGH)) {
    motor.write(0);
    valor_antiguo = LOW;
  }
}