#define Resistencia       5
#define  CODIGO_NO_TECLA  255 

#define Boton_ON        1
#define Boton_Timer     2
#define Sensor_Low      3
#define Sensor_High     4 

word  Tiempo;
char flag_Timer1 = 0;
unsigned char tecla;
int Estado = 1;

void setup() {
  
pinMode(Resistencia, OUTPUT);

}


void loop() {
  
  MAQ_Estados_Analisis();
  Timer_Analizar();


}

void MAQ_Estados_Analisis(void)
{
  switch(Estado)
  {
    case 1:
      MAQ_Estado_1();
      break;
    
    case 2:
      MAQ_Estado_2();
      break;
    
    case 3:
      MAQ_Estado_3();
      break;

    case 4:
      MAQ_Estado_4();
      break;

      case 5:
      MAQ_Estado_5();
      break;

    default:
      Estado_Inicializacion();
      break;
  }
}

void MAQ_Estado_1(void)
{
  if(TECLADO_Read() == 1){ //boton ON presionado
    Tiempo = 21600000;
    Estado=2;  
  }
}

void MAQ_Estado_2(void)
{
  if(TECLADO_Read() == 2){ //Boton timer presionado
    Tiempo = Tiempo + 1800000; //suma 30 minutos al tiempo
  }
  if (Tiempo > 54000000){
    Tiempo = 21600000;
  }

  if (TECLADO_Read() == 1){  //Al presionar el botón ON comienza el proceso
    Timer_Disparar(1, Tiempo, 0, Fin_Timer1);
    Estado=3;
  }
}

void MAQ_Estado_3(void)
{
  if(TECLADO_Read() == 5){ // Estado (0.0) de los sensores
    if(TECLADO_Read() == 6){
      digitalWrite(Resistencia,HIGH);
      Estado=4;
    }
  }
}

void MAQ_Estado_4(void)
{
   if(TECLADO_Read() == 3){ // Estado (1,1) de los sensores
    if(TECLADO_Read() == 4){
      digitalWrite(Resistencia,LOW);
    }
  Estado=5;
  }
}

void MAQ_Estado_5(void){
  if((flag_Timer1 == 1 ) || ((TECLADO_Read() == 1))) { //Si el timer llega a 0 o se presiona el botón On
  digitalWrite(Resistencia,LOW);
  Estado=1;
  }
  else{
    Estado=3;
  }
}


void Estado_Inicializacion(void){
  digitalWrite(Resistencia,LOW);
  Estado=1;
  Tiempo=0;
}

void Fin_Timer1(void){
  flag_Timer1 = 1;
}

void Display(int Horas, int minutos){

}