INFORME COMPORTAMIENTO CÓDIGO VICTOR
Encendido equipo:
Al iniciar el proceso al energizar digital D7 activa RE57 de inmediato.
Si pinpersianaAbierta 8 se mantiene en 0 volts a los 30 segundos activa relé 5 error.
Si pinpersianaAbierta 8 recibe 12 volts antes de pasar 30/seg activa pinRele34.
Si pinSensorpresion se mantiene en 0 volts pasados 30/seg activa relé 5 error.
Si pinSensorpresion recibe 24 volts antes de transcurridos 30/seg activa relé 28.
Hasta aquí todo bien el proceso funciona y aire caliente circula al área de confort
El primer problema surge al fallar el sensor de presión, que ya no envía 24vdc, y continua encendido relé 28, y eso es grabe tendría que apagar el relé 28, o detener todo el proceso, sin flujo de aire en la cámara de combustión terminaría en un problema grave.
Lo mismo sucede con persiana, si servomotor no envía 12 volts Arduino no apaga ventilador y eso también será catastrófico.
Otro detalle menor es que al encender no da tiempos, puse pinPersianaAbierta y pinSensorPresión en alto al llegar la señal de Remoto se encienden los tres relés al mismo tiempo cosa que en la vida real no sucede
Eso es lo que logrado ver hasta hora, soy muy novata en software, pero en hardware no estoy tan tullida, cuando vi el código pensé que pinError 5 era entrada, y hasta le dije que si lo podía cambiar (que pena pase) al pin digital 9, y lo hice por suerte el hardware me aviso de que el error era mío y no de pinError.
Me gustó mucho su creación Don Víctor, es minimalista el código, pocos renglones fácil de entender, pero toda vía soy incapaz de poner un punto y coma y no termine en error, ahora veo que las máquinas de estados finitos como algo amigable, lo mismo me paso con millis me daban terror, tarde casi un año e medio poder usarlos, y ahora pensaba terminaríamos en 300 o 400 renglones y estaría listo para la fiesta de San Juan y veo que no
#define pinRemoto 7
#define pinPersianaAbierta 8
#define pinSensorPresion 9
#define pinRele57 2
#define pinRele34 3
#define pinRele28 4
#define pinError 5
int remoto;
int persianaAbierta;
int sensorPresion;
unsigned long timer;
enum {
PASO1,
PASO2,
PASO3,
PASO4,
PASO5,
PASO6,
ERROR
};
int paso = PASO1;
void setup() {
Serial.begin(9600);
pinMode(pinRemoto, INPUT_PULLUP);
pinMode(pinPersianaAbierta, INPUT_PULLUP);
pinMode(pinSensorPresion, INPUT_PULLUP);
pinMode(pinRele57, OUTPUT); digitalWrite(pinRele57, LOW);
pinMode(pinRele34, OUTPUT); digitalWrite(pinRele34, LOW);
pinMode(pinRele28, OUTPUT); digitalWrite(pinRele28, LOW);
pinMode(pinError, OUTPUT); digitalWrite(pinError, LOW);
}
void loop() {
remoto = digitalRead(pinRemoto)==LOW;
persianaAbierta = digitalRead(pinPersianaAbierta)==LOW;
sensorPresion = digitalRead(pinSensorPresion)==LOW;
switch ( paso ) {
case PASO1:
if ( remoto==HIGH ) {
digitalWrite(pinRele57, HIGH);
timer = millis();
paso = PASO2;
}
break;
case PASO2:
if ( persianaAbierta==HIGH ) {
digitalWrite(pinRele34, HIGH);
timer = millis();
paso = PASO3;
}
if ( millis()-timer >= 30000UL ) {
digitalWrite(pinRele57, LOW);
paso = ERROR;
}
break;
case PASO3:
if ( sensorPresion==HIGH ) {
digitalWrite(pinRele28, HIGH);
paso = PASO4;
}
if ( millis()-timer >= 30000UL ) {
digitalWrite(pinRele57, LOW);
digitalWrite(pinRele34, LOW);
paso = ERROR;
}
case PASO4:
if ( remoto==LOW ) {
digitalWrite(pinRele28, LOW);
timer = millis();
paso = PASO5;
}
break;
case PASO5:
if ( millis()-timer >= 20000UL ) {
digitalWrite(pinRele34, LOW);
paso = PASO6;
}
break;
case PASO6:
if ( sensorPresion==LOW ) {
digitalWrite(pinRele57, LOW);
paso=PASO1;
}
break;
case ERROR:
digitalWrite(pinError, HIGH);
break;
}
}
Lo subo por que hice cambio en los pines creo que eso no afecta o si.