// -------variables de tiempo----------//
unsigned long tiempo_init_lavado = 0;

int8_t Faces_L = 0;
// ----------- variables -------------//

bool restart_lavado = false;
bool restart_Drain_spin = false;

#define MAX_TL_enjuague 1       // min para enjuagado
#define MAX_T_Drain_Spin 5*60  // min para drenado del agua y secado
#define RELAY_ON 0
#define RELAY_OFF 1

// -------- Faces del LLenado ------- //
bool LLenando = false;
bool llenado = false;
int8_t sensor_LLenado = 12;
// -------- Faces del Lavado ------- //
bool init_lavado = false;
bool lavado = false;
// -------- Faces del Enjuagado ------- //
bool init_Enjuague = false;
bool Enjuague = false;
// -------- Faces del Sentrifugado ------- //
bool sentrifugado = false;

bool END = false;


// ----- Panel de control ---//
int8_t Iniciar = 5;
int8_t Selec_Modo = 6;
int8_t BTN_Enjuage = 13;
bool EVEN_BTN_CLICK_INICIAR = false;
bool EVEN_BTN_LONG_INICIAR = false;

bool EVEN_BTN_CLICK_Selec_Modo = false;
bool EVEN_BTN_LONG_Selec_Modo= false;
bool EVEN_BTN_Enjuage = false;
bool Stop_Cycle = false;

// -------- salidas ------- //
// ----- pines del Motor -----//
#define Azul A0
#define Morado_blanco A1
#define Red A2

#define Bomba A3
#define Valvula_Agua A4
//---------- Status -------------//
#define Led_llenando 7
#define Led_Lavado 8
#define Led_Enjuague 9
#define Led_Drain_spin 10
//-----------------------------//

void setup() {
  Serial.begin(115200);
  // -----------inpusts-----------------//
  pinMode(Iniciar, INPUT_PULLUP);
  pinMode(Selec_Modo, INPUT_PULLUP);
  pinMode(sensor_LLenado, INPUT_PULLUP);
  pinMode(BTN_Enjuage, INPUT_PULLUP);

  // -----------OUTPUTS-----------------//
  pinMode(Azul, OUTPUT);
  pinMode(Morado_blanco, OUTPUT);
  pinMode(Red, OUTPUT);
  pinMode(Valvula_Agua, OUTPUT);
  pinMode(Bomba, OUTPUT);
  pinMode(Led_llenando, OUTPUT);
  pinMode(Led_Lavado, OUTPUT);
  pinMode(Led_Enjuague, OUTPUT);
  pinMode(Led_Drain_spin, OUTPUT);

  digitalWrite(Azul, RELAY_OFF);
  digitalWrite(Morado_blanco, RELAY_OFF);
  digitalWrite(Red, RELAY_OFF);
  digitalWrite(Bomba, RELAY_OFF);
  digitalWrite(Led_llenando, LOW);
  digitalWrite(Led_Lavado, LOW);
  digitalWrite(Led_Enjuague, LOW);
  digitalWrite(Led_Drain_spin, LOW);
  Serial.println("<-----[Lavadora Lista]---->");
}

void loop() {

  Control();

  switch (Faces_L) {
    case 0:
    Selecionar_Modo();
      break;
    case 1:
      llenado_de_Agua();
      break;
    case 2:
      Lavar();
      break;
    case 3:
      Enjuage_Cycle();
      break;
    case 4:
      Dain_Spin();
      break;
    case 5:
      END_Lavado();
      break;
  }
}