PABLO-7

Hola amigos estoy haciendo mi primer proyecto con Arduino y he hecho un proyecto de una persiana automática y veo un problema que es que mientras esta subiendo pulsamos Bajar deja de subir y empieza a bajar.Lo que quiero es que si esta subiendo aunque se pulse Bajar la persiana siga subiendo
y pare por final de carrera. Lo mismo en la acción de bajar.
Mando el código para ver si me podeis ayudar.
Muchas gracias

int PulsadorSubir = 2;                      
int PulsadorBajar = 3;
int PulsadorParo = 4;                                           
int FinCarrera_Subida = 5;
int FinCarrera_Bajada = 6;
int Rele_Subir = 7;
int Rele_Bajar = 8;                                            
void setup (void){
pinMode(PulsadorSubir, INPUT); 
pinMode(PulsadorBajar, INPUT);
pinMode(PulsadorParo, INPUT);                                         
pinMode(FinCarrera_Subida, INPUT);
pinMode(FinCarrera_Bajada, INPUT);
pinMode(Rele_Subir, OUTPUT);
pinMode(Rele_Bajar, OUTPUT);                                            
}
void loop (void) 
{                                           
if (digitalRead (PulsadorBajar) == HIGH          // Si pulsamos Bajar y ademas
&& digitalRead (PulsadorSubir) == LOW)           // no pulsamos Subir  
{                                                   
while ((digitalRead(FinCarrera_Bajada) == HIGH)  // Mientras esta el final de carrera Bajar pulsado (HIGH) y     
&& (digitalRead (PulsadorSubir) == LOW)          // ademas no se pulsa Subir                
&& (digitalRead(PulsadorParo)== LOW))            // no pulsamos el paro y                
{                                                  
digitalWrite (Rele_Subir, LOW);                  // no subimos persiana y  
digitalWrite (Rele_Bajar, HIGH);                 // SI BAJAMOS PERSIANA
}
}                                                                                                                                     
if (digitalRead (PulsadorSubir) == HIGH          // Si pulsamos Subir  y ademas  
&& digitalRead (PulsadorBajar) == LOW)           // no pulsamos Bajar y 
{                                                    
while ((digitalRead(FinCarrera_Subida) == HIGH)  // Mientras este el final de carrera Subir pulsado(HIGH) y     
&& (digitalRead (PulsadorBajar) == LOW )         // ademas no se pulsa Bajar y                 
&& (digitalRead(PulsadorParo)==LOW))             // no pulsamos el paro y
{                                                
digitalWrite (Rele_Bajar,LOW);                   // no bajamos persiana y                                    
digitalWrite (Rele_Subir, HIGH);                 // SI SUBIMOS PERSIANA        
}   
}                                                                     
digitalWrite (Rele_Subir, LOW);        
digitalWrite (Rele_Bajar, LOW);
}

Comienza leyendo las normas del foro y usando tags para insertar códigos. Vuelve a tu post, luego more, luego modify, estas en modo Edición, seleccionas todo el código y pulsas </> y esta puesto el tag de códigos.

Que haces estos dos al final

digitalWrite (Rele_Subir, LOW);        
digitalWrite (Rele_Bajar, LOW);

explicame eso y te respondo

En primer lugar darte las gracias y perdonar la forma de entrar en el es la primera vez
Estas dos lineas finales que me comentas las he puesto de esa forma para un estado de reposo si no se acciona ningún pulsador, sin ellas no se desactivan los relés.
Un saludo

Primero veo que aún no has corregido tu post#1 intentalo por favor!!

Segundo, debes pensar en que tus acciones ocurran solo una vez, y no a cada ciclo del loop porque si comentes un error tu programa ordenará a los relés cosas que no corresponden.
Entonces si tu acción es subir, pues subes, comandas los reles, borras el flag para que no lo haga mas y esperas a que alcance el fin de carrera corresondiente.

En todo tu código no entiendo que hace paro, porque tampoco entiendo como puedes presionar varios pulsadores simultaneos.

prueba este código y luego le agregamos la funcón paro que no se como quieres que actúe.

const byte PulsadorSubir         = 2;                      
const byte PulsadorBajar         = 3;
const byte PulsadorParo          = 4;                                           
const byte FinCarrera_Subida     = 5;
const byte FinCarrera_Bajada     = 6;
const byte Rele_Subir            = 7;
const byte Rele_Bajar            = 8;   

bool vbajar, vsubir;
bool FinSwBajada, FinSwSubida, paro;
bool moverArriba = LOW, vbajarAnt = LOW; 
bool moverAbajo  = LOW, vsubirAnt = LOW;

void setup (void){
  pinMode(PulsadorSubir, INPUT); 
  pinMode(PulsadorBajar, INPUT);
  pinMode(PulsadorParo, INPUT);                                         
  pinMode(FinCarrera_Subida, INPUT);
  pinMode(FinCarrera_Bajada, INPUT);
  pinMode(Rele_Subir, OUTPUT);
  pinMode(Rele_Bajar, OUTPUT);                                            
  digitalWrite(Rele_Subir, LOW);                 // motor subir apagado  
  digitalWrite(Rele_Bajar, LOW);                 // motor bajar apagado
}
void loop (void)  {                            

    vbajar = digitalRead (PulsadorBajar);
    vsubir = digitalRead (PulsadorSubir);
    FinSwBajada = digitalRead(FinCarrera_Bajada);
    FinSwSubida = digitalRead(FinCarrera_Subida);
    paro   = digitalRead(PulsadorParo);

    // Si pulsamos Bajar y ademas no pulsamos Subir     
    if (vbajar && !vbajarAnt && !moverArriba)  {       
       digitalWrite (Rele_Bajar, HIGH);   // SI BAJAMOS PERSIANA
       moverAbajo = HIGH;                 // persiana moviendose hacia abajo
    }
    vbajarAnt = vbajar;
    
    if (moverAbajo && FinSwBajada) {      // Si alcanzo Fin carrera bajada detengo
        digitalWrite (Rele_Bajar, LOW);   // Detengo motor bajar persiana
        moverAbajo = LOW;
    }
    
    if (vsubir && !vsubirAnt && !moverAbajo)  {       
       digitalWrite (Rele_Subir, HIGH);   // SI SUBIMOS PERSIANA
       moverArriba = HIGH;                 // persiana moviendose hacia arriba
    }
    vsubirAnt = vsubir;

    if (moverAbajo && FinSwSubida) {      // Si alcanzo Fin carrera subida detengo
        digitalWrite (Rele_Subir, LOW);   // Detengo motor bajar persiana
        moverArriba = LOW;
    }
}