Advertisement
hidromotic

LuzDomoticaMultiFuncion

Apr 30th, 2020
707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.32 KB | None | 0 0
  1. // Ejemplo de Luz domótica
  2.  
  3. //Luz domótica --> Invertir estado de una luz al presionar un botón
  4. //Con dos toques de botón--> Encender la luz temporizada (5 seg)
  5. //Si no pasó más de cierto tiempo desde el último toque
  6. //  --> Incrementar contador de toques
  7.  
  8. #define PIN_LED             13
  9. #define CONFIGURAR_LED      pinMode(PIN_LED, OUTPUT)
  10. #define ENCENDER_LED        digitalWrite(PIN_LED, HIGH)
  11. #define APAGAR_LED          digitalWrite(PIN_LED, LOW)
  12.  
  13. #define PIN_LUZ             11
  14. #define CONFIGURAR_LUZ      pinMode(PIN_LUZ, OUTPUT)
  15. #define ENCENDER_LUZ        digitalWrite(PIN_LUZ, HIGH)
  16. #define APAGAR_LUZ          digitalWrite(PIN_LUZ, LOW)
  17.  
  18. #define PIN_BOT             7
  19. #define CONFIGURAR_BOT      pinMode(PIN_BOT, INPUT)
  20. #define BOT_PRESIONADO      (digitalRead(PIN_BOT)==HIGH)
  21.  
  22. #define MS_ESPERA           1000  //Tiempo de espera desde la última pulsacion
  23. #define MS_TEMPORIZADOR     2000
  24.  
  25. bool luz=0;
  26. byte toques=0;  //Cantidad de toques del botón
  27. unsigned long millis_ini_luz=0; //Para el temporizador de apagado
  28.  
  29. void setup()
  30.   {
  31.   CONFIGURAR_LED;
  32.   CONFIGURAR_BOT;
  33.   CONFIGURAR_LUZ;
  34.   APAGAR_LUZ;
  35.   Serial.begin(9600);
  36.   }
  37.  
  38. //-------------------------------------------------------
  39. bool SePresionoBoton(void)
  40.   {
  41.   static bool bot_presionado_ant=0;
  42.  
  43.   if(BOT_PRESIONADO == bot_presionado_ant) return(0);
  44.   bot_presionado_ant=BOT_PRESIONADO;
  45.  
  46.   return(BOT_PRESIONADO);
  47.   }
  48.  
  49. //-------------------------------------------------------
  50. void InvertirLuz(void)
  51.   {
  52.   luz = !luz;
  53.  
  54.   if(luz) ENCENDER_LUZ;
  55.   else    APAGAR_LUZ;
  56.   }
  57.  
  58. //-------------------------------------------------------
  59. void SupervisarToquesBoton(void)
  60.   {
  61.   static char cont=0;
  62.   static unsigned long millis_ini=0;
  63.   static bool bot_presionado_ant=0;
  64.  
  65.   if(BOT_PRESIONADO == bot_presionado_ant)
  66.     {
  67.     if(!cont) return;
  68.     //...Hay algún toque
  69.     if(millis() - millis_ini < MS_ESPERA) return;
  70.     toques=cont;
  71.     cont=0;
  72.     }
  73.   bot_presionado_ant= BOT_PRESIONADO;
  74.  
  75.   //Se presionó o se liberó
  76.   if(!BOT_PRESIONADO) return;
  77.  
  78.   //Se presionó el botón  
  79.   cont++;
  80.   millis_ini=millis();
  81.  
  82.   }
  83.  
  84. //-------------------------------------------------------
  85. void ProcesaToques(void)
  86.   {
  87.   if(!toques) return;
  88.  
  89.   Serial.print("Toques:");
  90.   Serial.println(toques);
  91.  
  92.   switch(toques)
  93.     {
  94.     case 1: InvertirLuz();  break;
  95.     case 2:
  96.         luz=1;  ENCENDER_LUZ;
  97.         millis_ini_luz=millis();
  98.         break;
  99.     }
  100.   toques=0;
  101.   }
  102.  
  103. //-------------------------------------------------------
  104. void TemporizadorApagadoLuz(void)
  105.   {
  106.   if(!millis_ini_luz) return;
  107.   if(millis() - millis_ini_luz < MS_TEMPORIZADOR) return;
  108.   //Apagar la luz
  109.   luz=0;
  110.   APAGAR_LUZ;
  111.   millis_ini_luz=0;
  112.  
  113.   }
  114. //-------------------------------------------------------
  115. void loop()
  116.   {
  117.   SupervisarToquesBoton();  //Actualice una variable toques
  118.  
  119.   ProcesaToques();
  120.   TemporizadorApagadoLuz();
  121.  
  122.   LedTest();
  123.  
  124.   delay(1);
  125.   }
  126.  
  127. //-------------------------------------------------------
  128. void LedTest(void)
  129.   {
  130.   static bool encender_led=0;
  131.   static unsigned long millis_ant=0;
  132.  
  133.   if(millis()-millis_ant < 1000) return;
  134.   millis_ant=millis();
  135.  
  136.   //Invertir el estado del led
  137.   encender_led = !encender_led;
  138.  
  139.   if(encender_led)  ENCENDER_LED;
  140.   else              APAGAR_LED;
  141.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement