Problema con Sketch.

Hola a todos. Estoy tratando de hacer un programa para sustituir un programador de una lavadora industrial, con el siguiente programa:

const int sel1Pin =12; //selector en posicion programas 1,2,3. const int sel2Pin = 13; //selector en posicion programas 4,5. const int presosPin =11; //presostato const int pmPin = 10; //pulsador de marcha

const int libre1Pin = 0; const int libre2Pin = 1; const int relc1Pin = 2; const int relc3Pin = 3; const int relc4Pin = 4; const int reld1Pin = 5; const int reld3Pin = 6; const int relf4Pin = 7; const int relk4Pin = 8; const int rell6Pin = 9; int sel1,sel2,pm,nivel,lavado=0,desinf=0,fase=1,fased=1; void setup() { Serial.begin(9600); pinMode(libre1Pin, OUTPUT); pinMode(libre2Pin, OUTPUT); pinMode(sel1Pin, INPUT); pinMode(sel2Pin, INPUT); pinMode(presosPin, INPUT); pinMode(pmPin, INPUT);

pinMode(relc1Pin, OUTPUT); pinMode(relc3Pin, OUTPUT); pinMode(relc4Pin, OUTPUT); pinMode(reld1Pin, OUTPUT); pinMode(reld3Pin, OUTPUT); pinMode(relf4Pin, OUTPUT); pinMode(relk4Pin, OUTPUT); pinMode(rell6Pin, OUTPUT);

}

void loop() {

sel1=digitalRead(sel1Pin); //lavado sel2=digitalRead(sel2Pin); //desinfectado pm=digitalRead(pmPin); //pulsador de marcha nivel=digitalRead(presosPin); //presostato Serial.println(pm);

if (sel1==LOW && (pm==LOW && fase==1) && lavado==0) //se utiliza "fase" para q se no se vuelva a iniciar por el medio del prgrama. { lavado++; //marca para empezar lavado } if (sel2==LOW && pm==LOW && desinf==0) { desinf++; //marca para empezar desinfectado }

if (sel1==LOW && (lavado==1) && sel2==HIGH ) { //inicio de lavado

if (fase==1) //variable del presostato para saber en que parte del programa esta. {

digitalWrite(relc1Pin, HIGH); //fase 1/paso1 digitalWrite(reld1Pin, HIGH); digitalWrite(relk4Pin, HIGH); if (nivel==0 && fase==1) fase=2; //salto a fase 2 }

if (fase==2) { digitalWrite(relc1Pin, LOW); //fase2/paso2 digitalWrite(reld1Pin, LOW); digitalWrite(relc4Pin, HIGH); digitalWrite(relf4Pin, HIGH); delay (15000); digitalWrite(relc4Pin, LOW); //paso3 digitalWrite(relf4Pin, LOW); digitalWrite(relc1Pin, HIGH); digitalWrite(reld3Pin, HIGH); if (nivel==0 && fase==2) fase=3; }

if (fase==3) { //fase 3 digitalWrite(relc1Pin, LOW); //paso 4 digitalWrite(reld3Pin, LOW); digitalWrite(relc4Pin, HIGH); digitalWrite(relf4Pin, HIGH); digitalWrite(rell6Pin, HIGH); delay (15000); digitalWrite(rell6Pin, LOW); //paso 5 delay (18000); digitalWrite(relc4Pin, LOW); //paso 6 digitalWrite(relf4Pin, LOW); delay (9000); digitalWrite(reld1Pin, HIGH); //paso 7 if (nivel==0 && fase==3) fase=4; } if (fase==4) { //fase 4 digitalWrite(reld1Pin, LOW); //paso 8 digitalWrite(relc4Pin, HIGH); digitalWrite(relf4Pin, HIGH); delay (15000); digitalWrite(relc4Pin, LOW); //paso 9 digitalWrite(relf4Pin, LOW); digitalWrite(relk4Pin, LOW); lavado=0; //fin de lavado fase=1; } } //cierra if lavado

if (sel2==LOW && desinf==1 && sel1==HIGH){ //inicio desinfectado switch(fased){

case 1: // fase 1 digitalWrite(relc3Pin, HIGH); //paso1 digitalWrite(reld1Pin, HIGH); digitalWrite(relk4Pin, HIGH); if (nivel==0 && fased==1) fased=2; //salto a fase 2 break;

case 2: digitalWrite(relc3Pin, LOW); //paso 2 digitalWrite(reld1Pin, LOW); digitalWrite(relc4Pin, HIGH); digitalWrite(relf4Pin, HIGH); digitalWrite(rell6Pin, HIGH); delay (15000); digitalWrite(rell6Pin, LOW); //paso 3 delay (18000); digitalWrite(relc4Pin, LOW); //paso 4 digitalWrite(relf4Pin, LOW); digitalWrite(relk4Pin, LOW); desinf=0; fased=1;

} //cierra switch desinfectado

} //cierra if desinfectado

if (sel1==HIGH && sel2==HIGH){

digitalWrite(relc1Pin, LOW); digitalWrite(relc3Pin, LOW); digitalWrite(relc4Pin, LOW); digitalWrite(reld1Pin, LOW); digitalWrite(reld3Pin, LOW); digitalWrite(relf4Pin, LOW); digitalWrite(relk4Pin, LOW); digitalWrite(rell6Pin, LOW); lavado=0; desinf=0; fased=1; fase=1; } //fin if desactiva todo } //cierra loop.

Mi problema es que cuando entra el presostato al final del paso 1 para entrar en la fase 2 y mirando el monitor serial, las entradas no refrescan, se quedan fijas con el ultimo valor tomado con lo cual altera en lo sucesivo todo el programa. He probado a hacer los bucles con con las funcioes switch, do, if, pero pasa con siempre igual. Alguien sabria decirme por que pasa esto y como puedo solucionarlo. Gracias

Por favor, nadie me puede echar un cable?

Buenas Nacho, lo he intentado seguir 2 veces y me he perdido las dos, si quieres te echo un cable, pero partiendo de cero =(

Gracias Marcial, te parece que tengo muy mal enfocado el planteamiento del programa?.Tan solo es una secuencia que cambia cada vez que entra el presostato. Gracias por tu tiempo.

No se trata de eso, al contrario, me resulta complicado de seguir.