Mover servo con potenciómetro y un botón en Arduino uno

Hola, Buenos días. Tengo que mover un servo con un potenciómetro de 0 a 180 grados. y cuando presione un pulsador el servo tiene que ir directamente a 33 grados y quedarse fijo allí. sí presiono el mismo botón de nuevo el servo tiene que volver a moverse con el potenciómetro. este es mi código:

include <Servo.h>
Servo servo1;

int pinservo = 9;
int angulo = 0;
int pot = A0;
int potvalue=0;
int pulsador = 4;
int valor, valor_antiguo, estado;

void setup() {
  servo1.attach(pinservo);
  pinMode (pot,INPUT);
  servo1.write(angulo);
   pinMode(pulsador,INPUT);
  
}
void loop() {
  potvalue= analogRead(pot);
  angulo=map(potvalue,0,1023,0,180);
  servo1.write(angulo);  
  delay(20);

//pulsador
  valor = digitalRead(pulsador);
  if((valor==HIGH)&&(valor_antiguo==LOW)){
    estado = 1 - estado;
    delay(20);}
    
  valor_antiguo = valor;

  if(estado==1){
    servo1.write(33);  
}
     if(estado==0){
    servo1.write(angulo);    
    }
}

por algún motivo el servo si funciona con el potenciómetro. pero al presionar el botón no va a 33 grados, si no que se mueve unos grados y vuelve continuamente.
¿cual puede ser el detalle que me falta? Muchas Gracias!

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Pues a ver como has hecho las conexiones porque te aseguro que del código no es.

Luego de map tienes una instrucción de mas que fuerza ponerlo a angulo mira

   angulo = map(potvalue, 0, 1023, 0, 180);
   servo1.write(angulo);      // <========= ELIMINA

Versión resumida

void loop() {
   potvalue = analogRead(pot);
   angulo = map(potvalue, 0, 1023, 0, 180);
   //pulsador
   valor = digitalRead(pulsador);
   if ((valor == HIGH) && (valor_antiguo == LOW)) {
      estado = 1 - estado;
      delay(20);
   }

   valor_antiguo = valor;

   if (estado == 1) {
      servo1.write(33);
   }
   if (estado == 0) {
      servo1.write(angulo);
   }
}

Gracias por las respuestas.. el problema era esa línea de código como marcó surbyte.
esa línea forzaba al servo a seguir solamente al potenciómetro.
una vez solucioné el problema noté que el servo se movía con demasiada velocidad.
lo resolví descargando la librería (VarSpeedServo.h)
Muy valioso el foro arduino. gracias a todos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.