Advertisement
hidromotic

lor_p1

Jun 28th, 2021
692
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.80 KB | None | 0 0
  1. /*
  2.  *
  3.  * NOMBRE:[Ariel Alexis Lorda Barrabasqui]
  4.  *
  5.  * Entrgar con nombre archivo: usr_p1.ino
  6.  *
  7.  * 24/06/21 - Requerimientos
  8. * 2) Implementar un Lector de Pulsador, que permita diferenciar entre
  9.  *  a) Botón presiondo durante más de 500ms --> APAGA EL MODULO DE EFECTOS
  10.  *  b) 1 Toque corto de botón (menos de 500ms) HABILITA EFECTO A / Invierte el sentido
  11.  *  c) 2 Toques cortos de botón (un tiempo inferior a 500ms entre toques) HABILITA EFECTO B / Invierte el sentido
  12.  * 3) Módulo de Leds con múltiples efectos
  13.  *  Efecto a: Un punto que se va corriendo
  14.  *  b: Una barra de leds que se va completando
  15.  *
  16.  *  PORTD --> 8 LEDs
  17.  *  PORTB.0 --> Pulsador
  18.  *  PORTB.5 --> LED_TEST
  19. / */
  20. #define PUERTO_LEDS PORTD
  21. #define CONFIGURAR_LEDS DDRD=0XFF  
  22.  
  23. #define Pulsador PORTB.0  
  24.  
  25. #define CONFIGURAR_BOTON pinMode(8, INPUT)
  26. #define BOT_PRESIONADO  digitalRead(8)
  27.  
  28.  
  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. int estado = 1;
  37. int cont = 0;
  38.  
  39. void setup() {
  40.   CONFIGURAR_BOTON;
  41.   CONFIGURAR_LED_TEST;
  42.   Serial.begin(9600);
  43.   }
  44.  
  45. void loop() {
  46.   LedTest();
  47.   SupervisaPulsador();
  48.   Efectos();  
  49.   }
  50.  
  51. void SupervisaPulsador(void)
  52.   {
  53.   static unsigned long millis_ant_bot=0;
  54.   static unsigned long millis_act_bot=0;
  55.  
  56.   if(!BOT_PRESIONADO) return;     // NO se presionó el botón, vuelve al loop
  57.   millis_ant_bot = millis();      //Se presionó el botón
  58.  
  59.   while(BOT_PRESIONADO){
  60.      LedTest();
  61.      Efectos();  
  62.   }
  63.   millis_act_bot = millis();
  64.  
  65.   if(millis_act_bot - millis_ant_bot > 500){
  66.     estado = 0 ;
  67.     return;
  68.   }
  69.   cont++;
  70.   if(millis_act_bot - millis_ant_bot < 500){
  71.    if(cont == 1){
  72.       estado = 1;
  73.     }else{
  74.       estado = 2;
  75.       cont = 0;
  76.     }
  77.   }
  78.   }
  79.  
  80. void LedTest(void)
  81.   {
  82.   static bool led_encendido=false;
  83.   static unsigned long millis_ant=0;
  84.  
  85.   if(led_encendido && millis()-millis_ant>=TPO_LED_TEST_ON){
  86.      APAGAR_LED_TEST;
  87.      millis_ant=millis();
  88.      led_encendido= false;
  89.      }
  90.  
  91.   if(!led_encendido && millis()-millis_ant>=TPO_LED_TEST_OFF){
  92.      ENCENDER_LED_TEST;
  93.      millis_ant=millis();
  94.      led_encendido= true;
  95.     }
  96.   }
  97.  
  98.  
  99. void Efectos(void)
  100.   {
  101.   static unsigned long millis_ant_estado=0;
  102.  
  103.   switch(estado){
  104.     case 0:
  105.       PUERTO_LEDS = 0X00;
  106.       return;
  107.     case 1:
  108.       if(millis()-millis_ant_estado <100)return;
  109.       millis_ant_estado = millis();
  110.       PUERTO_LEDS<<=1;
  111.       PUERTO_LEDS = PUERTO_LEDS | 1;
  112.       return;
  113.     case 2:
  114.       if(millis()-millis_ant_estado <100)return;
  115.       millis_ant_estado = millis();
  116.       PUERTO_LEDS>>=1;
  117.       PUERTO_LEDS=PUERTO_LEDS | 0;
  118.       return;  
  119.   }
  120.   }
  121.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement