Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
// 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; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)