ayuda con codigo motor l298 y pulsador

hola chicos tengo un problema con el codigo para un pulsador y un puente en h en concreto el l298 mi idea es que al pulsar el boton el motor gire en un sentido durante un tiempo y luego vuelva a la posicion incial . el codigo sin el boton es este:

int IN3 = 5; 
int IN4 = 4;

void setup()
{
pinMode (IN4, OUTPUT);    // Input4 conectada al pin 4 
pinMode (IN3, OUTPUT);    // Input3 conectada al pin 5
}
void loop()
{
// Motor gira en un sentido
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW); 
delay(4000);
// Motor no gira
digitalWrite (IN4, LOW); 
delay(500);
// Motor gira en sentido inverso
digitalWrite (IN3, HIGH);
delay(4000);
// Motor no gira
digitalWrite (IN3, LOW); 
delay(5000);
}
pero cuando intento poner el pulsador no lo consigo
llego hasta aqui :


// Variables estáticas
int IN3 = 5; 
int IN4 = 4;
int pinBoton = 2;   // Declaramos la variable pin del Botón
// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón

void setup(){

// Inicializa el pin del botón como entrada:
pinMode(pinBoton, INPUT);

pinMode (IN4, OUTPUT);    // Input4 conectada al pin 4 
pinMode (IN3, OUTPUT);    // Input3 conectada al pin 5
}
void loop(){
// Lee el valor del pin del botón y lo almacena
// en la variable estadoBoton
estadoBoton = digitalRead(pinBoton);

// Chequea si el botón está pulsado:
if (estadoBoton == HIGH) {
// Si es así, enciende el LED:
digitalWrite(IN4, INPUT);
digitalWrite(IN3, INPUT)

}


// Motor gira en un sentido
digitalWrite (IN4, LOW);
digitalWrite (IN3, LOW); 
delay(4000);
// Motor no gira
digitalWrite (IN4, LOW); 
delay(500);
// Motor gira en sentido inverso
digitalWrite (IN3, HIGH);
delay(4000);
// Motor no gira
digitalWrite (IN3, LOW); 
delay(5000);


}

tampoco se mucho al respecto asi q os agradeceria enormemente la ayuda un saludo y muchas gracias de antemano

Hola trece, bienvenido. Te recuerdo que debes leer las normas del foro y una de ellas dice que los códigos deben postearse usando los tags. El 19 en este caso.

Veamos tu código: Tu código esta aparentemente bien para el control de los motores pero tiene una contradicción y una omisión o dos.

Veamos. Tu código esta bien para controlar los motores. Faltan definir los pulsadores nada mas. Solo cambiaré las etiquetas porque sus nombres no son indicativos de lo que hacen y es importante leer el código y entender cada cosa.

// Variables estáticas
int MOTOR3 = 5; 
int MOTOR4 = 4;
int pinBoton = 2;   // Declaramos la variable pin del Botón
int LED        = 6;

// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón
boolean status = false;

void setup(){

 // Inicializa el pin del botón como entrada:
 pinMode(pinBoton, INPUT);

 pinMode (MOTOR4, OUTPUT);    // Input4 conectada al pin 4 
 pinMode (MOTOR3, OUTPUT);    // Input3 conectada al pin 5
 pinMode (LED, OUTPUT);
}
void loop(){
 // Lee el valor del pin del botón y lo almacena
// en la variable estadoBoton
estadoBoton = digitalRead(pinBoton);

// Chequea si el botón está pulsado:
if (estadoBoton == HIGH) {
   if (status != statusAnt) {
       // Si es así, enciende el LED:
       digitalWrite(LED, HIGH);
       digitalWrite (MOTOR4, HIGH);
       digitalWrite (MOTOR3, LOW); 
       delay(4000);
   
   }else {
       digitalWrite(LED, LOW);
       digitalWrite (MOTOR4, LOW);
       digitalWrite (MOTOR3, HIGH); // Esto deberia invertir el giro
       delay(4000);
   }
   statusAnt = status;
 }
  
 digitalWrite (MOTOR4, LOW);
 digitalWrite (MOTOR3, LOW); // Esto deberia detener los motores


}

Prueba esto, que funcionará parcialmente. cuando presiones el boton deberia girar en un sentido y cuando lo liberes girará en el otro sentido

hola surbyte lo primero agradecerte tu rapida respuesta , que te hayas molestado en ayudarme lo que hace grande este foro y tb disculparme por no escribir en tag .

como ya habras notado no tengo mucha idea de programacion :'(

mi codigo inicial sin boton funciona pero es a base de recortar de lo que encuentro por la red por eso no coincidira con las explicaciones ,tal y como tu me dijiste ,disculpa.

en tu ejemplo me da varios errores con el statusAnt pero no me explique bien ,cuando dije de pulsar el boton me referia a que cuando se pulse el boton y se suelte comience a girar el motor hacia derecha un tiempo y vuelva a su posicion inicial ,alguna idea?

muchisimas gracias de antemano de nuevo por vuestro tiempo ,y espero que alguien mas le ayude

Te da errores porque yo tambien soy mal programador jajaja Si lees que te dice, seguro refiere a que no fue declarada la variabla statusAnt. Es similar a status asi que boolean statusAnt = false;

va de nuevo

// Variables estáticas
int MOTOR3 = 5; 
int MOTOR4 = 4;
int pinBoton = 2;   // Declaramos la variable pin del Botón
int LED        = 6;

// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón
boolean status = false;
boolean statusAnt = false;

void setup(){

 // Inicializa el pin del botón como entrada:
 pinMode(pinBoton, INPUT);

 pinMode (MOTOR4, OUTPUT);    // Input4 conectada al pin 4 
 pinMode (MOTOR3, OUTPUT);    // Input3 conectada al pin 5
 pinMode (LED, OUTPUT);
}
void loop(){
 // Lee el valor del pin del botón y lo almacena
// en la variable estadoBoton
estadoBoton = digitalRead(pinBoton);

// Chequea si el botón está pulsado:
if (estadoBoton == HIGH) {
   if (status != statusAnt) {
       // Si es así, enciende el LED:
       digitalWrite(LED, HIGH);
       digitalWrite (MOTOR4, HIGH);
       digitalWrite (MOTOR3, LOW); 
       delay(4000);
   
   }else {
       digitalWrite(LED, LOW);
       digitalWrite (MOTOR4, LOW);
       digitalWrite (MOTOR3, HIGH); // Esto deberia invertir el giro
       delay(4000);
   }
   statusAnt = status;
 }
  
 digitalWrite (MOTOR4, LOW);
 digitalWrite (MOTOR3, LOW); // Esto deberia detener los motores


}

muchas gracias de nuevo por tu tiempo surbyte !!!!

estoy probando el codigo y todavia tengo algun problemilla :slightly_frowning_face:

veras cuando pulso el boton arranca el motor (lo que para mi ya es un exito ;D )pero no enciende el led y tampoco cambia el sentido de giro ,vi la exclamacion

 if (status != statusAnt) {

y pense que podia ser un error asi que la cambie por otro =(aunque luego he visto q si que se emplea en algunos casos :fearful: )

if (status == statusAnt) {

para probar cosas :P con ese cambio funciona el led cuando pulsas pero no se apaga es como si el else no me funcionase ya q ni me cambia el giro ni enciende el led :drooling_face: el delay hace que gire el motor durante 4 seg no? he probado a quedarme pulsando(que tampoco es como debiera funcionar) pero tampoco ,es posible que sea algun error mio a la hora de poner bien los cables aunque a priori no lo consegui... mañana seguire probando ,solo queria agradecerte de nuevo tu ayuda y emplear tu tiempo en ayudarme ,se agradece

Dejame ver que hice mal.

hola chicos me parece que ya esta :D he estado probando y me parece que lo tengo aca os dejo el codigo por si alguno le vale mi primer codigo que satisfaccion jajajaja gracias surbyte

int IN3 = 5; 
int IN4 = 4;
int LED = 3;
int BUTTON = 2;
void setup()
{
  pinMode (IN4, OUTPUT);    // Input4 conectada al pin 4 
  pinMode (IN3, OUTPUT);    // Input3 conectada al pin 5
  pinMode(BUTTON,INPUT);
  pinMode (LED, OUTPUT);
}
void loop()
{
  if(digitalRead(BUTTON) == LOW) {
    digitalWrite (LED, LOW);
 digitalWrite (IN4, LOW);
  digitalWrite (IN3, LOW);  
  } else{  
    digitalWrite (LED, HIGH);
  // Motor gira en un sentido
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, LOW); 
  delay(4000);
  // Motor no gira
  digitalWrite (IN4, LOW); 
  delay(500);
  // Motor gira en sentido inverso
  digitalWrite (IN3, HIGH);
  delay(4000);
  // Motor no gira
  digitalWrite (IN3, LOW); 
  delay(5000);
}
}