Advertisement
hidromotic

cor_p1

Jun 28th, 2021
616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.93 KB | None | 0 0
  1. /*
  2.  *
  3.  * NOMBRE: Cordoba Gustavo
  4.  *
  5.  * Entrgar con nombre archivo: usr_p1.ino
  6.  *
  7.  * 24/06/21 - Requerimientos
  8.  * 1) Implementar un LED TEST que tenga un destello de 50ms cada 1000ms (50ms ENCENDIDO / 950ms APAGADO)
  9.  * 2) Implementar un Lector de Pulsador, que permita diferenciar entre
  10.  *  a) Botón presiondo durante más de 500 ms ---apaga el modulo de efectos
  11.  *  b) 1 Toque corto de botón(menos de 500ms)----habilita efecto A/invierte el sentido
  12.  *  c) 2 Toques cortos de botón (un tiempo inferior a 500ms entre toques)
  13.  * 3) Módulo de Leds con múltiples efectos
  14.  *  Efecto a: Un punto que se va corriendo
  15.  *  b: Una barra de leds que se va completando
  16.  *  
  17.  *  PORTD --> 8 LEDs
  18.  *  PORTB.0 --> Pulsador
  19.  *  PORTB.5 --> LED_TEST
  20. / */
  21. #define PUERTO_LEDS          PORTD
  22. #define CONFIGURAR_LEDS      DDRD=0XFF
  23. #define Pulsador            PORTB.0
  24. #define LED_TEST            PORTB.5
  25. //PB0
  26. #define CONFIGURAR_BOTON     pinMode(8, INPUT)
  27. #define BOT_PRESIONADO       digitalRead(8)
  28. //PB5
  29. #define CONFIGURAR_LED_TEST  pinMode(13, OUTPUT)
  30. #define ENCENDER_LED_TEST    digitalWrite(13, HIGH)
  31. #define APAGAR_LED_TEST      digitalWrite(13, LOW)
  32.  
  33.  
  34. #define TPO_LED_TEST_ON   50
  35. #define TPO_LED_TEST_OFF  950
  36.  
  37. int efecto = 0; //variable global efecto
  38. void setup() {
  39.   CONFIGURAR_BOTON;
  40.   CONFIGURAR_LED_TEST;
  41.   Serial.begin(9600);
  42.   }
  43.  
  44. void loop() {
  45.   LedTest();
  46.   SupervisaPulsador();
  47.   Efectos();  
  48.   }
  49.  
  50. void SupervisaPulsador(void)
  51.   {
  52.     static unsigned long tpo_ant=0;
  53.     static unsigned long btn_accionado=0;
  54.    
  55.   /* Eventos
  56.    *  Se presionó el botón
  57.    *  
  58.    *  Se superaron los 500ms con el botón presionado
  59.    *  Se liberó el botón antes de los 500ms
  60.    *  Se liberó el botón después de los 500ms
  61.    *  Pasaron más de 500ms desde que se liberó el botón
  62.    */
  63.     if(!BOT_PRESIONADO)return;
  64.       tpo_ant=millis();
  65.       btn_accionado=millis();
  66.      while(BOT_PRESIONADO)
  67.       {
  68.         Efectos();
  69.       }
  70.      
  71.     if(tpo_ant-btn_accionado < 500)
  72.       efecto=1;//variable global
  73.     if(tpo_ant-btn_accionado >500)
  74.       efecto=0;// variable global
  75.      
  76.      
  77.   }
  78.  
  79. void LedTest(void)
  80.   {
  81.   static bool led_encendido=false;
  82.   static unsigned long millis_ant=0;
  83.  
  84.   if(led_encendido && millis()-millis_ant > TPO_LED_TEST_ON)
  85.     {
  86.       millis_ant=millis();
  87.       APAGAR_LED_TEST;
  88.       led_encendido=false;
  89.     }
  90.   if (!led_encendido && millis()-millis_ant >= TPO_LED_TEST_OFF)
  91.     {
  92.      millis_ant=millis();
  93.      ENCENDER_LED_TEST;
  94.      led_encendido=true;
  95.     }
  96.  
  97.   }
  98. void Efectos(void)
  99.   {
  100.     static unsigned long tpo_ant=0;
  101.  
  102.     if(efecto==1){
  103.      if(millis()-tpo_ant < 200)return;
  104.         tpo_ant=millis();
  105.        PUERTO_LEDS<<=1;
  106.        PUERTO_LEDS=PUERTO_LEDS | 1;
  107.     }
  108.  
  109.     if(efecto==0){
  110.       if(millis()-tpo_ant < 200)return;
  111.         tpo_ant=millis();
  112.        PUERTO_LEDS>>=1;
  113.        PUERTO_LEDS=PUERTO_LEDS | 0;
  114.       }
  115.   }
  116.  
  117.  
  118.  
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement