SERVOMOTOR

Hola buenos días soy nuevo con Arduino y quiero empezar a programar con esta herramienta.

Lo que quiero llegar a conseguir es que cuando el boton se pulse una vez gire el servomotor 90 grados , espere 5 segundos y vuelva a su posición inicial.

Este es el código que tengo pero no se que me falla , si alguien me pudiese ayudar, gracias.

#include <Servo.h>

Servo myservo;

const int BOTON = 2;
int  pos = 0;


void setup()
{
 myservo.attach(6);
 pinMode(BOTON, INPUT);       
}

void loop()
{
   
   
  if (digitalRead(BOTON) == HIGH) { 
     
  for (int pos = 0; pos <= 90; pos += 1) { // de 0 a 90 grados
  myservo.write(pos);   // le decimos al servo que vaya a la posición     
  delay(5000); 
  for (int pos = 90; pos <= 0; pos += 1) { // de 90 a 0 grados
  myservo.write(pos);   // le decimos al servo que vaya a la posición     
   
  }
  
  }
  }
  }

Y dice que cuando presiones y mantengas presionado hará lo que indicas pero si sueltas deja de hacerlo.

2 cosas:

  1. LEe las normas y edita tu post. Te envié privado para hacerlo
  2. Usa Autoformato CONTROL+T para que el código luzca indentado o sea con sangría.

Presta atención a como presentar la información.

Tu código debe activar una variable que cambie cada vez que presiones

#include <Servo.h>

Servo myservo;

const byte BOTON = 2;
int  pos = 0;
bool estado, estadoAnt = false; 
bool flag;

void setup()
{
  myservo.attach(6);
  pinMode(BOTON, INPUT);
}

void loop()
{
  estado = digitalRead(BOTON);
  if (estado && !estadoAnt)
      flag = !flag;
  estadoAnt = estado;

  if (flag) {
      for (int pos = 0; pos <= 90; pos += 1) { // de 0 a 90 grados
          myservo.write(pos);   // le decimos al servo que vaya a la posición
          delay(5000);
          for (int pos = 90; pos <= 0; pos += 1) { // de 90 a 0 grados
            myservo.write(pos);   // le decimos al servo que vaya a la posición
    
          }
  
      }
  }
}

Esto no se detiene hasta que presiones de nuevo el pulsador.

Disculpen que meta mi cuchara pero, está parte de codigo me parece que no va a funcionar como es lo esperado

 for (int pos = 0; pos <= 90; pos += 1) { // de 0 a 90 grados
          myservo.write(pos);   // le decimos al servo que vaya a la posición
          delay(5000);
          for (int pos = 90; pos <= 0; pos += 1) { // de 90 a 0 grados
            myservo.write(pos);   // le decimos al servo que vaya a la posición

No me gusta ese delay de 5 segundos en el lugar que está, en el segundo for hay un += en lugar de un -= , hay un <= en lugar de >=, ademas el segundo for esta dentro del primero.
Que tal asi:

#include <Servo.h>
Servo myservo;
const byte BOTON = 2;
bool estado, estadoAnt = false;
bool flag = false;
void setup()
{
  myservo.attach(6);
  pinMode(BOTON, INPUT);
}

void loop()
{
  estado = digitalRead(BOTON);
  if (estado && !estadoAnt)
    flag = !flag;
  estadoAnt = estado;
  if (flag)
  {
    for (byte pos = 0; pos <= 90; pos += 1)
    {
      // de 0 a 90 grados
      myservo.write(pos); // le decimos al servo que vaya a la posición
      delay(10); // Tiempo entre salto de grado a grado, con esto tardara cerca de un segundo en llegar a los 90°, puedes cambiarlo si gustas
    }

    delay(5000);

    for (byte pos = 90; pos >= 0; pos -= 1)
    {
      // de 90 a 0 grados
      myservo.write(pos); // le decimos al servo que vaya a la posición
      delay(10);
    }
    flag = false;   // para que salga del if(flag).  Sin esto el servo entra en bucle, saliendo solamente cuando se presione el boton (puedes quitarla o dejarla segun lo que necesites
  }
}

Es el código completo incluyendo la modificación de Surbyte, a la cual solo le agregue la ultima linea (si quieres que el servo se detenga después de regresar a 0), puedes dejarla o quitarla dependiendo si quieres que se detenga o siga funcionando el servo