Bueno si no he entendido mal, creo que podria quedar algo asi, lo he probado en el simulador y parece que va, me queda desplazarme y pasarlo a placa y probar.
Bueno a ver que os parece, por si tengo que tocar (que sera lo mas seguro), esta algo mas limpio y parece mas sencillo.
//PROGRAMA BARRERA HIDRAULICA
//Definir pines de salida
#define rldown 4 //grupo de reles de bajada
#define rlup 5 //grupo de reles de subida
#define rlpow 6 // rele de alimentacion general
int tsubida = 13000;
int tbajada = 10000;
volatile int b = 0;
volatile int state = 1; //state 1=subida, state 2=bajando, state 3=bajada, state 4=subiendo, state 5=parada arriba
int tespera = 30000;
unsigned long tiempo;
void control()
{
para();
b = 1;
}
void setup()
{
// put your setup code here, to run once:
pinMode(rldown, OUTPUT);
pinMode(rlup, OUTPUT);
pinMode(rlpow, OUTPUT);
pinMode(3, INPUT);
digitalWrite(rlpow, HIGH);
digitalWrite(rldown, HIGH);
digitalWrite(rlup, HIGH);
state = 1;
attachInterrupt(1, control, FALLING);
tiempo=millis();
}
void sube()
{
digitalWrite(rlup, LOW); delay(500); digitalWrite(rlpow, LOW);
}
void baja()
{
digitalWrite(rldown, LOW); delay(500); digitalWrite(rlpow, LOW);
}
void para()
{
digitalWrite(rlpow, HIGH); digitalWrite(rldown, HIGH); digitalWrite(rlup, HIGH);
}
void loop()
{
if (state==1) //subida en tiempo de espera
{
if (b==1) //orden de parada
{
state=5; b=0;
}
if (millis()>tiempo+tespera)
{
baja(); state=2;
}
}
if (state==2) //bajando
{
if (b==1) //orden de inversion
{
b=0; para(); sube(); state=4; tiempo=millis();
}
if (millis()>tiempo+tbajada)
{
para(); state=3;
}
}
if (state==3) //bajada
{
if (b==1) //orden de subida
{
b=0; sube(); state=4;tiempo=millis();
}
}
if (state==4) //subiendo
{
if (b==1) //orden de inversion
{
b=0; para(); baja(); state=2; tiempo=millis();
}
if (millis()>tiempo+tsubida)
{
para(); state=1;
}
}
if (state==5) //subida en paro permanente
{
if (b==1) //orden de bajada
{
baja(); state=2; b=0;tiempo=millis();
}
}
}
A ver si no la lio subiendo el código.
Gracias de nuevo.
actualizacion.ino (1.97 KB)