Arreglar codigo para añadir pulsador inicio ciclo

buenas tardes, ya hacia tiempo que no entraba pero me he encontrado con un muro que no doy solucionado yo solo :frowning: descargue este codigo para mover unos servos. pero
es un ciclo continuo, quisiera añadirle un pulsador para que iniciara el ciclo , este es el codigo :

#include <ESP32Servo.h>

// create four servo objects 
Servo servo1;
Servo servo2; 
Servo servo3; 
Servo servo4;  

// Published values for SG90 servos; adjust if needed
int minUs = 500;
int maxUs = 2500;

// These are all GPIO pins on the ESP32
// Recommended pins include 2,4,12-19,21-23,25-27,32-33 
int servo1Pin = 18;
int servo2Pin = 19;
int servo3Pin = 22;
int servo4Pin = 23;

int pos = 0;      // initial position in degrees

void setup()
{ 
  servo1.attach(servo1Pin, minUs, maxUs);
  servo2.attach(servo2Pin, minUs, maxUs);
  servo3.attach(servo3Pin, minUs, maxUs);
  servo4.attach(servo4Pin, minUs, maxUs);        
}

void loop() {
  for (pos = 0; pos <= 45; pos += 1) { 
    // in steps of 1 degree
    servo1.write(pos);              
    delay(20);                       
  }
  for (pos = 0; pos <= 45; pos += 1) { 
    // in steps of 1 degree
    servo2.write(pos);              
    delay(20);      
  }
  for (pos = 45; pos >= 0; pos -= 1) { 
    // in steps of 1 degree
    servo3.write(pos);              
    delay(20);                       
  }
  for (pos = 0; pos <= 60; pos += 1) { 
    // in steps of 1 degree
    servo4.write(pos);              
    delay(20); 
  }
  for (pos = 45; pos >= 0; pos -= 1) {
    servo1.write(pos);
    delay(20);                      
  }
  for (pos = 45; pos >= 0; pos -= 1) {
    servo2.write(pos);
    delay(20);      
  }
  for (pos = 0; pos <= 45; pos += 1) { 
    servo3.write(pos);
    delay(20);            
  }
  for (pos = 60; pos >= 0; pos -= 1) { 
    servo4.write(pos);
    delay(20);      
  }
}

Moderador:
Por favor, lee las Normas del foro

  1. Edita tu título, usa uno que no tenga justamente lo que se considera un título inútil.
    Ver en las normas punto 5.
    Piensa un título y descriptivo. nada de "Una ayudada? no me aclaro" es un título que no dice nada.
  2. Los códigos/errores deben postearse usando etiquetas. Corrige por favor
1 Like

Otra vez código mal adjuntado, otra vez preguntas como agregar un pulsador.
¿No aprendiste ambas cosas con el proyecto con los LEDs del año pasado?

1 Like

pero no acepta el input pullup etc por eso pregunto :frowning:
encontre este codigo pero no se como mandarle que inicie el ciclo :

// Declaramos el pin al que estará conectado el pulsador
int pinPulsador=4;
// Declaramos el pin al que estará conectado el led
int pinLed=2;
void setup()
{
  //Determinamos que el pin del pulsador sera para recibir 
  pinMode(pinPulsador, INPUT);
  //Determinamos que el pin del led sera para salir
  pinMode(pinLed, OUTPUT);
}
void loop()
{
  //Si la señal del pulsador es activa encendemos el led
  if (digitalRead(pinPulsador) == HIGH) {
    digitalWrite(pinLed, HIGH);
  } 
  //de lo contrario apagamos el led
  else {
    digitalWrite(pinLed, LOW);
  }
  delay(10);
}

pues no doy como poner etiquetas surbyte O_O no me acabo de aclarar con lo del foro, mil perdones

¿Quién no acepta INPUT_PULLUP?

use un pull up para iniciar el ciclo pero estaba mal :frowning: y ya me quede ahi atrancado, ahi puse el tutorial que me dierais para el led pero no tengo ahora mismo ni repajolera idea de como añadirlo al programa de los servos y no encuentro nada para leer que me de alguna direccion , no te enfades maximo que hace un año que no toco el arduino

Sube el esquema de las conexiones incluyendo el pulsador (puedes hacerlo a mano y subir una foto, lo importante es que se entienda).

Y lo que quieres (si entendí bien) es agregar en setup() un simple lazo while() que espere a que se pulse el boton.
Algo así

byte boton = digitalRead(PIN_BOTON);
while (boton == HIGH) { 
  boton = digitalRead(PIN_BOTON);
}

Habiendo definido el pin como INPUT_PULLUP y el pulsador con cierre a GND.


esta fatal dibujado, no encuentro la libreta ( y asi a pelo no me sale)

¿Estás usando una fuente partida (+5V, GND, -5V) o confundes -5V con el negativo de una fuente de 5V, o sea masa o GND?

Como que se te olvidó decir que trabajas con un ESP32, ¿no?
Probablemente debas agregar

yield();

dentro del while() para evitar cuelgues por watchdog.

mil perdones pensé que lo puse en el primer post ,fuente partida (usb para el esp32 y alimentanción de 5v para los servos) gnd y masa aqui lo uso igual (ya ya se que no es lo mismo), como como hay ya me has perdido mas aun

GND (ground) es lo que en español llamamos masa.

Creo que tu esquema debería ser así

El GPIO02 no es la mejor opción para conectar el pulsador porque está conectado el LED "L" y además lo usa el bootloader, te recomiendo que uses otro pin para evitarte posibles dolores de cabeza.

entonces lo dejo asi ? :

int PIN_BOTON = 4 ;

int pos = 0;      // initial position in degrees

void setup()
{ 
  byte boton = digitalRead(PIN_BOTON);
while (boton == HIGH) yield(); { 
  boton = digitalRead(PIN_BOTON);

una cosa si uso alimentacion compartida (5v para esp32 y servos) puede dar fallo ?

al final he cambiado al arduino leonardo(pro micro pone en la placa) pero sigo sin dar con la forma de iniciar el ciclo con un pulsador, ya no se que hacer :frowning:

Es tu dinero, no voy a decirte como gastarlo pero si no empiezas por entender lo que haces, por más que cambies de placa, las cosas no van a funcionar mágicamente.
Como ya te dije, te lo han explicado en otra consulta, se nota que mucha importancia no le has dado sino ya sabrías hacerlo. Así y todo te pasé una solución en #8.


No había visto tu respuesta en #13. :man_facepalming:t2:

No, está mal, eso que escribiste es lo mismo que

int PIN_BOTON = 4 ;

int pos = 0;      // initial position in degrees

void setup()
{ 
  byte boton = digitalRead(PIN_BOTON);
  while (boton == HIGH)  yield();   // el punto y coma termina la instrucción

  boton = digitalRead(PIN_BOTON);  // esto quedó fuera del  while()

como ves, el lazo while() queda en un bucle infinito ejecutando yield() porque nunca más se vuelve a leer el pulsador.
Y todo por no prestar atención.
Yo dije que pusieras yield() dentro del lazo, y dentro es entre las llaves.

aah coño que no lo entendi (ando con mas cosas maximo, por mucho que me esfuerce con entenderlo, a la media hora ya no tengo ni idea y luego ya me pierdo por completo, el cambio de placa fur por un problema que daba interferencias y los servos (7 en total) se volvian locos, muchisimas gracias por tu infinita paciencia y mil perdones

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