Pulsador Teensy ++ 2.0

:roll_eyes:

#include <EEPROM.h>
byte Pulsador  =23; // Pines usados
byte Led       =25; 
byte Ventilador=27;  
#define ON HIGH        
#define OF LOW
boolean Estado_Pulsador;
boolean Estado_Anterior = false; 
boolean Led_Encendido=false;
boolean Ven_Encendido=false;
unsigned long Parpadeo=1000;  // Tiempo de parpadeo de led
unsigned long T_Anterior=0;   // Auxiliar para controlar tiempo de parpadeo
unsigned long T_Apagar=3000;  // Tiempo a pulsar para apagar
unsigned long T_Pulsado=0;    // Auxiliar para controlar tiempo de boton pulsado
byte Secuencia=0;             // Para manejar la secuencia de salidas
byte Asecuencia = 0;          // Para guardar la secuencia en eeprom
void setup()
{
  pinMode(Pulsador, INPUT);       
  pinMode(Led, OUTPUT);         
  pinMode(Ventilador, OUTPUT);
  //for( int i=0;i<255;i++) {EEPROM.write(i, 0);} // ejecutarlo solo la primera vez para borrar la eeprom
  Asecuencia= EEPROM.read(0);
  Secuencia=Asecuencia;
  digitalWrite(Led, OF);
  digitalWrite(Ventilador, OF);  
}

void loop()
{
  Estado_Pulsador =!digitalRead(Pulsador); // Lee el estado del botón.  
  if (Estado_Pulsador && !Estado_Anterior) // Pulsador pasa de low a high
  {
    T_Pulsado=millis()+T_Apagar;           // Para controlar el timpo que pasa pulsado 
    Estado_Anterior=true;                  // No enta en el if hasta q pulsador pase de high a low
    Secuencia++;                           // Pasamos a siguiente secuencia
  } 
  if (!Estado_Pulsador && Estado_Anterior) // Pulsador pasa de high a low
  {
    Estado_Anterior=false;                 // No enta en el if hasta q pulsador pase de low a high
    T_Pulsado=0;                           // Al soltar pulsador ya no controlamos el tiempo 
  } 
  if (T_Pulsado>0 && Estado_Pulsador && millis()>T_Pulsado)  
  {                                        // Hay tiempo cargado para controlar el fin y pulsador en high y ha transcurrido el tiempo del pulsador activo
    T_Pulsado=0;                           // Ya no controlamos timepo de pulsado
    Secuencia=0;                           // Secuencia 0, todo apagado
  }  
  if (Secuencia==0)                        // Todo apagado
  {
    Led_Encendido=false;
    Ven_Encendido=false;
    T_Anterior=0;                          // Para que pueda funcionar el parpadeo de nuevo
  }
  else if (Secuencia==1)                   // Pulsamos por 1ª vez, todo encendido
    {
      Led_Encendido=true;
      Ven_Encendido=true;
    }
    else if (Secuencia==2)                 // Pulsamos por 2ª vez, Apaga ventilador y led parpadea
      {
        Ven_Encendido=false;        
        if (millis()>T_Anterior)           // Tiempo parpadeo finalizado
        {
          T_Anterior=millis() + Parpadeo;// Tiempo a esperar para siguiente parpadeo
          Led_Encendido=!Led_Encendido;  // de encendido a apagado y viceversa
        }           
      }
      else {Secuencia=1; }    
  if (Led_Encendido) {digitalWrite(Led, ON);} else {digitalWrite(Led, OF);}
  if (Ven_Encendido) {digitalWrite(Ventilador, ON);} else {digitalWrite(Ventilador, OF);}  
  if (Asecuencia != Secuencia)
  {
    Asecuencia = Secuencia;
    EEPROM.write(0, Asecuencia);
  }  
}