hidromotic

zab_p1

Jun 28th, 2021 (edited)
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.64 KB | None | 0 0
  1. /*
  2.  * Dimas Zabala
  3.  *
  4. */
  5. /*
  6.  *
  7.  * NOMBRE:
  8.  *
  9.  * Entrgar con nombre archivo: usr_p1.ino
  10.  *
  11.  * 24/06/21 - Requerimientos
  12.  * 1) Implementar un LED TEST que tenga un destello de 50ms cada 1000ms (50ms ENCENDIDO / 950ms APAGADO)
  13.  * 2) Implementar un Lector de Pulsador, que permita diferenciar entre
  14.  *  a) Botón presiondo durante más de 500ms segundo --> APAGA EL MODULO DE EFECTOS
  15.  *  b) 1 Toque corto de botón (menos de 500ms) habilita efecto a / invierte el sentido
  16.  *  c) 2 Toques cortos de botón (un tiempo inferior a 500ms entre toques) HABILITA EFECTO B / Invierte el sentido
  17.  * 3) Módulo de Leds con múltiples efectos
  18.  *  Efecto a: Un punto que se va corriendo
  19.  *  b: Una barra de leds que se va completando
  20.  *  
  21.  *  PORTD --> 8 LEDs
  22.  *  PORTB.0 --> Pulsador
  23.  *  PORTB.5 --> LED_TEST
  24. / */
  25. #define PUERTO_LEDS PORTD
  26. #define CONFIGURAR_LEDS 0xFF //define como output pines 1-7
  27.  
  28. #define CONFIGURAR_BOTON  pinMode(8, INPUT)  //DDRB&=~1
  29. #define BOT_PRESIONADO    digitalRead(8)
  30.  
  31. #define CONFIGURAR_LED_TEST pinMode(13, OUTPUT)
  32. #define ENCENDER_LED_TEST   digitalWrite(13,HIGH)
  33. #define APAGAR_LED_TEST     digitalWrite(13,LOW)
  34.  
  35. #define TPO_LED_TEST_ON   50
  36. #define TPO_LED_TEST_OFF  950
  37.  
  38. void setup() {
  39.   Serial.begin(9600);
  40.   CONFIGURAR_LED_TEST;
  41.   CONFIGURAR_BOTON;
  42.   PUERTO_LEDS;
  43.   CONFIGURAR_LEDS;
  44.   }
  45.  
  46. bool moduloEfectos=true, efectoA=false, efectoB=false;
  47.  
  48. void loop() {
  49.   LedTest();
  50.   SupervisaPulsador();
  51.   Efectos();
  52.   }
  53.  
  54. void SupervisaPulsador(void)
  55.   {
  56.   /* Eventos
  57.    *  Se presionó el botón
  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.    static bool bot_presionado_ant=0;
  64.    static unsigned long millis_ant=0,milli=0,millis_pas=0;
  65.    static int pulsos=0;
  66.    
  67.   if(BOT_PRESIONADO==bot_presionado_ant) return;
  68.   bot_presionado_ant=BOT_PRESIONADO;
  69.  
  70.   if(!BOT_PRESIONADO) return;
  71.  
  72.   milli=millis();
  73.  
  74.   while(BOT_PRESIONADO) {
  75.     millis_ant=millis();
  76.     }
  77.  
  78.   millis_pas = millis_ant - milli;
  79.  
  80.   pulsos++;
  81.  
  82.   if(millis_ant>500 )moduloEfectos=false;
  83.   if(millis_ant<500 && pulsos<2){efectoA=true;pulsos=0;}
  84.   if(millis_ant<500 && pulsos>=2){efectoB=true;pulsos=0;}
  85.   }
  86.  
  87. void LedTest(void)
  88.   {
  89.   static bool led_encendido=false;
  90.   static unsigned long millis_ant=0;
  91.  
  92.   if(led_encendido==false){
  93.     if(millis()-millis_ant<950) return;
  94.     millis_ant=millis();
  95.     led_encendido=!led_encendido;
  96.     }
  97.   else{
  98.     if(millis()-millis_ant<50) return;
  99.     millis_ant=millis();
  100.     led_encendido=!led_encendido;
  101.     }
  102.  
  103.   if(led_encendido) ENCENDER_LED_TEST;
  104.   else              APAGAR_LED_TEST;
  105.   }
  106.  
  107. void Efectos(void)
  108.   {
  109.     if(moduloEfectos)return;
  110.    
  111.     if(efectoA)efectoPunto();
  112.    
  113.     if(efectoB)efectoBarra();
  114.   }
  115.  
  116. void efectoPunto(){
  117.   int i=0;
  118.   static int irIzquierda=0;
  119.   static unsigned int t_inicio1=0;
  120.  
  121.   if(millis() - t_inicio1 < 500)return;
  122.   t_inicio1 = millis();
  123.  
  124.   if(PUERTO_LEDS & (1<<7))irIzquierda=1;
  125.  
  126.   if(irIzquierda==0){
  127.     PUERTO_LEDS << 1;
  128.     PUERTO_LEDS=PUERTO_LEDS & 1<<i;
  129.     }
  130.   else{
  131.     PUERTO_LEDS >> 1;
  132.     PUERTO_LEDS=PUERTO_LEDS & 1<<i;
  133.     }
  134.   }
  135.  
  136. void efectoBarra(){
  137.   static int irIzquierda=0;
  138.   static unsigned int t_inicio1=0;
  139.  
  140.   if(millis() - t_inicio1 < 500)return;
  141.   t_inicio1 = millis();
  142.  
  143.   if(PUERTO_LEDS & (1<<7))irIzquierda=1;
  144.   if(PUERTO_LEDS & (1<<0))irIzquierda=0;
  145.  
  146.   if(irIzquierda==0){
  147.     PUERTO_LEDS<<=1;
  148.     PUERTO_LEDS=PUERTO_LEDS | 1;
  149.     }
  150.   else{
  151.     PUERTO_LEDS>>=1;
  152.     PUERTO_LEDS=PUERTO_LEDS | 1;
  153.     }
  154.   }
  155.  
Add Comment
Please, Sign In to add comment