Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Programador: Benja Berterreix
- * Ejercicio: Detonador.
- * Objetivo: Activar la salida luego de cierto tiempo de detectado el flanco descendente en la entrada. Desactivar la salida al detectar el flanco ascendente.
- https://pastebin.com/0yFDVZgs
- */
- //Led Test
- #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)
- //Salida
- #define PIN_SALIDA 12
- #define CONFIGURAR_SALIDA pinMode(PIN_SALIDA, OUTPUT)
- #define ACTIVAR_SALIDA digitalWrite(PIN_SALIDA, HIGH)
- #define DESACTIVAR_SALIDA digitalWrite(PIN_SALIDA, LOW)
- //Entrada
- #define PIN_ENTRADA 7
- #define CONFIGURAR_ENTRADA pinMode(PIN_ENTRADA, INPUT)
- #define ENTRADA_ACTIVADA digitalRead(PIN_ENTRADA)
- void setup() {
- CONFIGURAR_LED;
- CONFIGURAR_SALIDA;
- CONFIGURAR_ENTRADA;
- Serial.begin(9600);
- }
- void loop() {
- LedTest();
- Detonador();
- delay(1);
- }
- void Detonador(void){
- static unsigned long t_ini, millis_cont=0;
- static bool salida = 0, entrada_ant = 0, armada = 0;
- const static int countdown = 3;
- static unsigned long cont = 0;
- // cuando la cuenta termina, activa la salida
- if(armada){
- if( millis()- millis_cont > 1000)
- {
- millis_cont=millis();
- Serial.println(cont--); //3...2...1.
- }
- //Queremos que muestre la cuenta regresiva countdown -
- if(millis() - t_ini < countdown*1000) return;
- ACTIVAR_SALIDA;
- armada = 0;
- }
- // si no apreto nada, me voy
- if(ENTRADA_ACTIVADA == entrada_ant) return;
- entrada_ant = ENTRADA_ACTIVADA;
- // cuando se suelta el boton, comienza la cuenta regresiva
- if(!ENTRADA_ACTIVADA){
- t_ini = millis();
- armada = 1;
- cont=countdown;
- return;
- }
- // si se apreta el boton, desactiva la salida
- if(ENTRADA_ACTIVADA){
- armada = 0;
- DESACTIVAR_SALIDA;
- Serial.println(armada? "- Armada -" : "- Desarmada -");
- }
- }
- void LedTest(void){
- static bool encender_led=0;
- static unsigned long millis_ant=0;
- if(millis()-millis_ant < 500) 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