Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Ejemplo de Luz domótica
- //Luz domótica --> Invertir estado de una luz al presionar un botón
- //Con dos toques de botón--> Encender la luz temporizada (5 seg)
- //Si no pasó más de cierto tiempo desde el último toque
- // --> Incrementar contador de toques
- #define PIN_LED 13
- #define CONFIGURAR_LED pinMode(PIN_LED, OUTPUT)
- #define ENCENDER_LED digitalWrite(PIN_LED, HIGH)
- #define APAGAR_LED digitalWrite(PIN_LED, LOW)
- #define PIN_LUZ 11
- #define CONFIGURAR_LUZ pinMode(PIN_LUZ, OUTPUT)
- #define ENCENDER_LUZ digitalWrite(PIN_LUZ, HIGH)
- #define APAGAR_LUZ digitalWrite(PIN_LUZ, LOW)
- #define PIN_BOT 7
- #define CONFIGURAR_BOT pinMode(PIN_BOT, INPUT)
- #define BOT_PRESIONADO (digitalRead(PIN_BOT)==HIGH)
- #define MS_ESPERA 1000 //Tiempo de espera desde la última pulsacion
- #define MS_TEMPORIZADOR 2000
- bool luz=0;
- byte toques=0; //Cantidad de toques del botón
- unsigned long millis_ini_luz=0; //Para el temporizador de apagado
- void setup()
- {
- CONFIGURAR_LED;
- CONFIGURAR_BOT;
- CONFIGURAR_LUZ;
- APAGAR_LUZ;
- Serial.begin(9600);
- }
- //-------------------------------------------------------
- bool SePresionoBoton(void)
- {
- static bool bot_presionado_ant=0;
- if(BOT_PRESIONADO == bot_presionado_ant) return(0);
- bot_presionado_ant=BOT_PRESIONADO;
- return(BOT_PRESIONADO);
- }
- //-------------------------------------------------------
- void InvertirLuz(void)
- {
- luz = !luz;
- if(luz) ENCENDER_LUZ;
- else APAGAR_LUZ;
- }
- //-------------------------------------------------------
- void SupervisarToquesBoton(void)
- {
- static char cont=0;
- static unsigned long millis_ini=0;
- static bool bot_presionado_ant=0;
- if(BOT_PRESIONADO == bot_presionado_ant)
- {
- if(!cont) return;
- //...Hay algún toque
- if(millis() - millis_ini < MS_ESPERA) return;
- toques=cont;
- cont=0;
- }
- bot_presionado_ant= BOT_PRESIONADO;
- //Se presionó o se liberó
- if(!BOT_PRESIONADO) return;
- //Se presionó el botón
- cont++;
- millis_ini=millis();
- }
- //-------------------------------------------------------
- void ProcesaToques(void)
- {
- if(!toques) return;
- Serial.print("Toques:");
- Serial.println(toques);
- switch(toques)
- {
- case 1: InvertirLuz(); break;
- case 2:
- luz=1; ENCENDER_LUZ;
- millis_ini_luz=millis();
- break;
- }
- toques=0;
- }
- //-------------------------------------------------------
- void TemporizadorApagadoLuz(void)
- {
- if(!millis_ini_luz) return;
- if(millis() - millis_ini_luz < MS_TEMPORIZADOR) return;
- //Apagar la luz
- luz=0;
- APAGAR_LUZ;
- millis_ini_luz=0;
- }
- //-------------------------------------------------------
- void loop()
- {
- SupervisarToquesBoton(); //Actualice una variable toques
- ProcesaToques();
- TemporizadorApagadoLuz();
- LedTest();
- delay(1);
- }
- //-------------------------------------------------------
- void LedTest(void)
- {
- static bool encender_led=0;
- static unsigned long millis_ant=0;
- if(millis()-millis_ant < 1000) return;
- millis_ant=millis();
- //Invertir el estado del led
- encender_led = !encender_led;
- if(encender_led) ENCENDER_LED;
- else APAGAR_LED;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement