proyecto puente levadizo

Hola a todos, estoy intentando hacer el proyecto de u puente levadizo, utilizando un integrado l293d.

explico el proceso del programa que me gustaría que hiciera, cuando active el pulsador quiero que el led verde pase a rojo y suba el puente unos segundos , en cuanto suba se active el motor que haga pasar un barco, y a continuación que baje el puente, y en cuanto se vuelva a pulsar haga el proceso contrario.

a continuación dejo aquí mi programa podéis modificar lo que me creáis que esta mal o se podría mejorar:

#define Pulsador 7 //EL PIN DEL BOTON
#define verde 13
#define red 2
#define parpadeo 8

int inicio = 0; //Estado de la salida al arrancar arduino
int estadoAC = 0; // Estado actual del boton
int estadoAN = 0; //Variable para guardar el estado anterior del pulsador
int barcoviene = 5; 
int barcova = 6; 
int puentebajad = 9; 
int puentesubed = 10; 
int puentebajai = 3; 
int puentesubei = 11;
int vel = 150;

void setup (){

   pinMode(puentebajad, OUTPUT);
   pinMode(puentesubed, OUTPUT);
   pinMode(puentebajai, OUTPUT);
   pinMode(puentesubei, OUTPUT);
   pinMode(barcoviene, OUTPUT);
   pinMode(barcova, OUTPUT);
   pinMode(Pulsador, INPUT); //Ponemos el pin en modo entrada
   pinMode(verde,OUTPUT);   
   pinMode(red,OUTPUT); 
   pinMode(parpadeo,OUTPUT);
}

void loop(){ 
   
   digitalWrite(parpadeo, LOW);
     delay(100);
    digitalWrite (parpadeo, HIGH);
    delay(100);

 estadoAC = digitalRead (Pulsador); //Actualizamos el valor de la variable

 if(estadoAC && estadoAN == 0)
 {
   inicio = 1 - inicio;// asignamos el estado contrario
   delay(100);
  digitalWrite(verde, LOW);
    digitalWrite (red, HIGH);
 }

 estadoAN = estadoAC;
      if(inicio == 1)
    {  
     
    digitalWrite(red, LOW);
    digitalWrite (verde, HIGH);
    
    analogWrite(puentesubei, vel);  // sube puente 2seg
   analogWrite(puentebajai, 0); 
   analogWrite(puentesubed, vel);  
   analogWrite(puentebajad, 0);
   delay (2000);

   analogWrite(barcova, vel);  // pasa barco 5seg
   analogWrite(barcoviene, 0); 
   delay (5000);
   
   analogWrite(puentesubei, 0);  // baja puente 2seg
   analogWrite(puentebajai, vel); 
   analogWrite(puentesubed, 0);  
   analogWrite(puentebajad, vel);
   delay (2000);
      
    digitalWrite (verde, HIGH);
    digitalWrite(red, LOW);     
  
}else
{
     digitalWrite(red, LOW);
    digitalWrite (verde, HIGH);
    
analogWrite(puentesubei, vel);  // sube puente 2seg
   analogWrite(puentebajai, 0); 
   analogWrite(puentesubed, vel);  
   analogWrite(puentebajad, 0);
   delay (2000);

   analogWrite(barcova, 0);  // pasa barco 5seg
   analogWrite(barcoviene, vel); 
   delay (5000);
   
   analogWrite(puentesubei, 0);  // baja puente 2seg
   analogWrite(puentebajai, vel); 
   analogWrite(puentesubed, 0);  
   analogWrite(puentebajad, vel);
   delay (2000);  
      
    digitalWrite (verde, HIGH);
    digitalWrite(red, LOW);
}
}

Code tags por favor. el </> button. Gracias, Moderator.

Moderador:
Hola, bienvenido al foro Arduino.
En la sección proyectos tienes estos dos hilos que debiste haber leído antes de postear

Como tu consulta es para otra sección lo muevo a Software.
Agradezco que hayas posteado debidamente el código. Solo ubicaste mal tu tópico.

Normas del foro

Hola, a ver si ese programa te funciona, yo no tengo ese chip y no lo puedo probar.

#define Pulsador 7 //EL PIN DEL BOTON
#define verde 13
#define red 2
#define parpadeo 8

//bool inicio; //Estado de la salida al arrancar arduino Me sobra para lo que hago luego
   
             
             
// no hace falta definirlas a 0, por defecto coje ese valor al definirlas pero no es un error y funcionaria todo.
bool estadoAC = 0; // Estado actual del barco La defino como boleana ya que solo cogera valor 0 o 1:
                   //: 0= no ha pasado el barquito
//bool estadoAN = 0; Me sobra para lo que hago luego

//----todo esto esta bien pero ¿porque no como #define-------------
//-------- o los #define anteriores aqui como int.------------
//-------- no es error para el funcionamieno, ----------------
//--------solo cuestion de criterios y unificacion------------
int barcoviene = 5;
int barcova = 6;
int puentebajad = 9;
int puentesubed = 10;
int puentebajai = 3;
int puentesubei = 11;
int vel = 150;
//---------------------------------------------------

void setup (){
   pinMode(puentebajad, OUTPUT);
   pinMode(puentesubed, OUTPUT);
   pinMode(puentebajai, OUTPUT);
   pinMode(puentesubei, OUTPUT);
   pinMode(barcoviene, OUTPUT);
   pinMode(barcova, OUTPUT);
   pinMode(Pulsador, INPUT); //Ponemos el pin en modo entrada
   pinMode(verde,OUTPUT);  
   pinMode(red,OUTPUT);
   pinMode(parpadeo,OUTPUT);
}

void loop(){
 // no se que tienes enchufado en el pin 8
 // ni porque lo enciendes a cada paso por el Loop aunque no aprietes el boton
 //---------------------------------------------------------------
 digitalWrite(parpadeo, LOW);
 delay(100);
 digitalWrite (parpadeo, HIGH);
 delay(100);
 //----------------------------------------------------------------
 
 
 
 if(digitalRead (Pulsador)){// suponiendo pulsador conecado a + (asi lo has definido antes)
  
   delay(100);//Bueno, quizas tengas que cambiar para que detecte bien laa pulsacion
  
   //}Lo quito para hacer un if dentro de otro if
   if(estadoAC == 0){ //No ha pasado el barco     
      digitalWrite(red, HIGH);
      digitalWrite (verde, LOW);   
      analogWrite(puentesubei, vel);  // sube puente 2seg
      analogWrite(puentebajai, 0);
      analogWrite(puentesubed, vel);  
      analogWrite(puentebajad, 0);
      delay (2000);

      analogWrite(barcova, vel);  // pasa barco 5seg
      analogWrite(barcoviene, 0);
      delay (5000);  
   
      analogWrite(puentesubei, 0);  // baja puente 2seg
      analogWrite(puentebajai, vel);
      analogWrite(puentesubed, 0);  
      analogWrite(puentebajad, vel);
      delay (2000);
     
    digitalWrite (verde, HIGH);
    digitalWrite(red, LOW);
    estadoAC == 1 // el barco ha pasado  
    }
else{
    digitalWrite(red, LOW);
    digitalWrite (verde, HIGH);
   
   analogWrite(puentesubei, vel);  // sube puente 2seg
   analogWrite(puentebajai, 0);
   analogWrite(puentesubed, vel);  
   analogWrite(puentebajad, 0);
   delay (2000);

   analogWrite(barcova, 0);  // pasa barco 5seg
   analogWrite(barcoviene, vel);
   delay (5000);
   
   analogWrite(puentesubei, 0);  // baja puente 2seg
   analogWrite(puentebajai, vel);
   analogWrite(puentesubed, 0);  
   analogWrite(puentebajad, vel);
   delay (2000);  
     
   digitalWrite (verde, HIGH);
   digitalWrite(red, LOW);
   estadoAC == 0 // el barco no ha pasado o ha vuelto
}
}
}

PD: Podrias haber dicho que el puente tenia dos hojas, me costo pillarlo.
saludos.

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