Advertisement
hidromotic

Detonador_Benja

May 26th, 2020
923
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.29 KB | None | 0 0
  1. /* Programador: Benja Berterreix
  2.  * Ejercicio: Detonador.
  3.  * Objetivo: Activar la salida luego de cierto tiempo de detectado el flanco descendente en la entrada. Desactivar la salida al detectar el flanco ascendente.
  4. https://pastebin.com/0yFDVZgs
  5.  */
  6.  
  7. //Led Test
  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. //Salida
  14. #define PIN_SALIDA          12
  15. #define CONFIGURAR_SALIDA   pinMode(PIN_SALIDA, OUTPUT)
  16. #define ACTIVAR_SALIDA      digitalWrite(PIN_SALIDA, HIGH)
  17. #define DESACTIVAR_SALIDA   digitalWrite(PIN_SALIDA, LOW)
  18.  
  19. //Entrada
  20. #define PIN_ENTRADA         7
  21. #define CONFIGURAR_ENTRADA  pinMode(PIN_ENTRADA, INPUT)
  22. #define ENTRADA_ACTIVADA    digitalRead(PIN_ENTRADA)
  23.  
  24. void setup() {
  25.   CONFIGURAR_LED;
  26.   CONFIGURAR_SALIDA;
  27.   CONFIGURAR_ENTRADA;
  28.   Serial.begin(9600);
  29. }
  30.  
  31. void loop() {
  32.   LedTest();
  33.   Detonador();
  34.   delay(1);
  35. }
  36.  
  37. void Detonador(void){
  38.   static unsigned long t_ini, millis_cont=0;
  39.   static bool salida = 0, entrada_ant = 0, armada = 0;
  40.   const static int countdown = 3;
  41.   static unsigned long cont = 0;
  42.  
  43.   // cuando la cuenta termina, activa la salida
  44.   if(armada){
  45.     if( millis()- millis_cont > 1000)
  46.       {
  47.       millis_cont=millis();
  48.       Serial.println(cont--); //3...2...1.
  49.       }
  50.     //Queremos que muestre la cuenta regresiva countdown -
  51.     if(millis() - t_ini < countdown*1000)  return;
  52.  
  53.     ACTIVAR_SALIDA;
  54.     armada = 0;
  55.   }
  56.    
  57.   // si no apreto nada, me voy
  58.   if(ENTRADA_ACTIVADA == entrada_ant) return;
  59.   entrada_ant = ENTRADA_ACTIVADA;
  60.  
  61.   // cuando se suelta el boton, comienza la cuenta regresiva
  62.   if(!ENTRADA_ACTIVADA){
  63.     t_ini = millis();
  64.     armada = 1;
  65.     cont=countdown;
  66.     return;
  67.   }
  68.  
  69.   // si se apreta el boton, desactiva la salida
  70.   if(ENTRADA_ACTIVADA){
  71.     armada = 0;
  72.     DESACTIVAR_SALIDA;
  73.     Serial.println(armada? "- Armada -" : "- Desarmada -");
  74.   }
  75. }
  76.  
  77. void LedTest(void){
  78.   static bool encender_led=0;
  79.   static unsigned long millis_ant=0;
  80.  
  81.   if(millis()-millis_ant < 500) return;
  82.   millis_ant=millis();
  83.  
  84.   //Invertir el estado del led
  85.   encender_led = !encender_led;
  86.  
  87.   if(encender_led)  ENCENDER_LED;
  88.   else              APAGAR_LED;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement