Buenas, estoy haciendo un sistema de control para una lavadora, necesito hacer la secuencia de enjuagado y de lavado, tengo pensado hacerlo con millis, pero no he trabajado mucho con ello, hice un codigo pero no me funciona, la secuencia que necesito hacer es la siguiente:
//********* Secuencia de enjuagado: *********/////
// encender GIRO_FF por 10 segundos
// apagar GIRO_FF por 4 segundos
// encender GIRO_RW por 10 segundos
// apagar GIRO_RW por 4 segundos
// esa secuencia de los 4 pasos anteriores se deberá repetir por 5 minutos
a continuación el código que he hecho hasta ahora.
//Control de salidas
int APAGADO = 1;
int ENCENDIDO = 0;
// Variables de salidas
int LLENADO_FRIO1 = 12; // declaramos la variable SALIDA1 y le asignamos el pin 2
int LLENADO_FRIO2 = 11; // declaramos la variable SALIDA2 y le asignamos el pin 3
int LLENADO_CALIENTE = 10; // declaramos la variable SALIDA3 y le asignamos el pin 4
int DRENADO = 9; // declaramos la variable SALIDA4 y le asignamos el pin 5
int GIRO_FF = 8; // declaramos la variable SALIDA5 y le asignamos el pin 6
int GIRO_RW = 7; // declaramos la variable SALIDA6 y le asignamos el pin 7
// Variables de entrada
int OPCION_A = 6;
int OPCION_B = 5;
int START = 4;
int SENSOR_PUERTA = 3;
int SENSOR_NIVEL = 2;
// Variables de secuencia
int SA1;
// Variables para los millis
unsigned long t1;
unsigned long t2;
unsigned long t3;
unsigned long t4;
void setup() {
Serial.begin(115200);
//Configuracion de los pines de salida
pinMode(LLENADO_FRIO1, OUTPUT);
pinMode(LLENADO_FRIO2, OUTPUT);
pinMode(LLENADO_CALIENTE, OUTPUT);
pinMode(DRENADO, OUTPUT);
pinMode(GIRO_FF, OUTPUT);
pinMode(GIRO_RW, OUTPUT);
//Configuracion de los pines de entrada
pinMode(START, INPUT);
pinMode(OPCION_A, INPUT);
pinMode(OPCION_B, INPUT);
pinMode(SENSOR_PUERTA, INPUT);
pinMode(SENSOR_NIVEL, INPUT);
// Inicializando las salidas
digitalWrite(LLENADO_FRIO1, APAGADO);
digitalWrite(LLENADO_FRIO2, APAGADO);
digitalWrite(LLENADO_CALIENTE, APAGADO);
digitalWrite(DRENADO, APAGADO);
digitalWrite(GIRO_FF, APAGADO);
digitalWrite(GIRO_RW, APAGADO);
SA1 = 0;
}
void loop() {
if ( (digitalRead(SENSOR_PUERTA) == HIGH) && (digitalRead(START) == HIGH) && (SA1 == 0) )
{
digitalWrite(LLENADO_FRIO1,ENCENDIDO);
SA1 = 1;
}
if ( (digitalRead(SENSOR_NIVEL) == HIGH) && (SA1 == 1) )
{
//digitalWrite(LLENADO_FRIO1,ENCENDIDO);
delay(500);
digitalWrite(LLENADO_FRIO1,APAGADO);
SA1 = 2;
}
//********* Secuencia de enjuagado: *********/////
// encender GIRO_FF por 10 segundos
// apagar GIRO_FF por 4 segundos
// encender GIRO_RW por 10 segundos
// apagar GIRO_RW por 4 segundos
// esa secuencia de los 4 pasos se debera repetir por 5 minutos
if ( (digitalRead(SENSOR_NIVEL) == HIGH) && (SA1 == 2) )
{
digitalWrite(GIRO_FF,ENCENDIDO);
t1 = millis();
}
if (millis()-t1 >= 10000)
{
digitalWrite(GIRO_FF,APAGADO);
t2 = millis();
}
if (millis()-t2 >= 4000)
{
digitalWrite(GIRO_RW,ENCENDIDO);
t3 = millis();
}
if (millis()-t3 >= 10000)
{
digitalWrite(GIRO_RW,APAGADO);
t4 = millis();
}
//********* Fin de la Secuencia de enjuagado: *********/////
}
No se si ademas de millis sea mas facil usar otras sentencias, como un for por ejemplo, he intentado hacerlo y no se me ocurre como, porque el proceso lleva varios enjuagados, y la idea es replicar el primer codigo de la secuencia y usarlo para los otros, solo que modificando el tiempo que dura.
Muchas gracias, espero y puedan ayudarme a adelantar esta parte para continuar con el desarrollo.