Advertisement
hidromotic

pig_p1

Jun 28th, 2021
710
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.16 KB | None | 0 0
  1. #define PUERTO_LEDS PORTD
  2. #define CONFIGURAR_LEDS DDRD = 0xFF
  3.  
  4. #define CONFIGURAR_BOTON DDRB = DDRB | (1<<0)
  5. #define BOT_PRESIONADO digitalRead(8)
  6.  
  7. #define CONFIGURAR_LED_TEST DDRB = DDRB | (1<<5)
  8. #define ENCENDER_LED_TEST PORTB = PORTB | (1<<5)
  9. #define APAGAR_LED_TEST PORTB = PORTB & ~(1<<5)
  10.  
  11.  
  12. #define TPO_LED_TEST_ON 950
  13. #define TPO_LED_TEST_OFF 50
  14.  
  15. //Estado anterior del boton
  16. static bool presionado_ant = 0;
  17.  
  18. //referencia milis led test
  19. static unsigned long milis_ant_test = 0;
  20.  
  21. //
  22. static bool led_ant_test = 0;
  23. static int efecto = 0;
  24. static unsigned long milis_ant_efecto = 0;
  25. static int contador = 0;
  26. int start_presion = 0;
  27. int end_presion = 0;
  28. int idle_presion = 0;
  29. int hold_presion = 0;
  30. bool sentido_efecto1 = 0;
  31.  
  32. void setup() {
  33.  
  34.   CONFIGURAR_LED_TEST;
  35.   CONFIGURAR_BOTON;
  36.   CONFIGURAR_LEDS;
  37.  
  38. }
  39.  
  40. void loop() {
  41.  
  42.   LedTest();
  43.   SupervisaPulsador();
  44.   Efectos();
  45.  
  46. }
  47.  
  48. void SupervisaPulsador(void)
  49. {
  50.   bool presionado = BOT_PRESIONADO;
  51.   if (presionado == presionado_ant) return;
  52.  
  53.   presionado_ant = presionado;
  54.  
  55.   if (BOT_PRESIONADO) {
  56.  
  57.     start_presion = millis();
  58.     idle_presion = start_presion - end_presion;
  59.  
  60.  
  61.     /*efecto++;
  62.       PUERTO_LEDS = B00000000;
  63.       if(efecto == 3){
  64.       efecto = 0;
  65.       }*/
  66.  
  67.   } else {
  68.     end_presion = millis();
  69.     hold_presion = end_presion - start_presion;
  70.     if (hold_presion >= 500) {
  71.       efecto = 2;
  72.     }
  73.     if (hold_presion < 500) efecto = 0;
  74.  
  75.     if (idle_presion < 500) {
  76.       efecto = 1;
  77.       sentido_efecto1 = !sentido_efecto1;
  78.     }
  79.  
  80.   }
  81.  
  82. }
  83.  
  84. /* Eventos
  85.     Se presionó el botón
  86.     Se superaron los 500ms con el botón presionado
  87.     Se liberó el botón antes de los 500ms
  88.     Se liberó el botón después de los 500ms
  89.     Pasaron más de 500ms desde que se liberó el botón
  90. */
  91.  
  92.  
  93.  
  94. void LedTest()
  95. {
  96.   unsigned long tiempoActual = millis();
  97.  
  98.   if (tiempoActual - milis_ant_test >= 950 && led_ant_test == 0) {
  99.  
  100.     milis_ant_test = tiempoActual;
  101.     ENCENDER_LED_TEST;
  102.     led_ant_test = 1;
  103.  
  104.   } else if (tiempoActual - milis_ant_test >= 50 && led_ant_test == 1) {
  105.     milis_ant_test = tiempoActual;
  106.     APAGAR_LED_TEST;
  107.     led_ant_test = 0;
  108.   }
  109.  
  110.  
  111.  
  112. }
  113.  
  114. void Efectos(void)
  115. {
  116.   unsigned long tiempoActualEfecto = millis();
  117.  
  118.   if (tiempoActualEfecto - milis_ant_efecto >= 500) {
  119.     milis_ant_efecto = tiempoActualEfecto;
  120.  
  121.     switch (efecto) {
  122.       case 0:
  123.  
  124.  
  125.         PUERTO_LEDS <<= 1;
  126.  
  127.         PUERTO_LEDS = PUERTO_LEDS | 1;
  128.  
  129.         if (PUERTO_LEDS == B11111111) {
  130.           PUERTO_LEDS = B00000000;
  131.         }
  132.  
  133.  
  134.         break;
  135.  
  136.       case 1:
  137.  
  138.         if (sentido_efecto1) {
  139.           switch (contador) {
  140.  
  141.             case 0:
  142.               PUERTO_LEDS = B00000000;
  143.               PUERTO_LEDS = PUERTO_LEDS | (1 << 0);
  144.               break;
  145.             case 1:
  146.               PUERTO_LEDS = B00000000;
  147.               PUERTO_LEDS = PUERTO_LEDS | (1 << 1);
  148.               break;
  149.             case 2:
  150.               PUERTO_LEDS = B00000000;
  151.               PUERTO_LEDS = PUERTO_LEDS | (1 << 2);
  152.               break;
  153.             case 3:
  154.               PUERTO_LEDS = B00000000;
  155.               PUERTO_LEDS = PUERTO_LEDS | (1 << 3);
  156.               break;
  157.             case 4:
  158.               PUERTO_LEDS = B00000000;
  159.               PUERTO_LEDS = PUERTO_LEDS | (1 << 4);
  160.               break;
  161.             case 5:
  162.               PUERTO_LEDS = B00000000;
  163.               PUERTO_LEDS = PUERTO_LEDS | (1 << 5);
  164.               break;
  165.             case 6:
  166.               PUERTO_LEDS = B00000000;
  167.               PUERTO_LEDS = PUERTO_LEDS | (1 << 6);
  168.               break;
  169.             case 7:
  170.               PUERTO_LEDS = B00000000;
  171.               PUERTO_LEDS = PUERTO_LEDS | (1 << 7);
  172.               break;
  173.  
  174.  
  175.           }
  176.  
  177.           contador++;
  178.  
  179.           if (contador > 7) contador = 0;
  180.         }
  181.  
  182.         else {
  183.           switch (contador) {
  184.  
  185.             case 0:
  186.               PUERTO_LEDS = B00000000;
  187.               PUERTO_LEDS = PUERTO_LEDS | (1 << 7);
  188.               break;
  189.             case 1:
  190.               PUERTO_LEDS = B00000000;
  191.               PUERTO_LEDS = PUERTO_LEDS | (1 << 6);
  192.               break;
  193.             case 2:
  194.               PUERTO_LEDS = B00000000;
  195.               PUERTO_LEDS = PUERTO_LEDS | (1 << 5);
  196.               break;
  197.             case 3:
  198.               PUERTO_LEDS = B00000000;
  199.               PUERTO_LEDS = PUERTO_LEDS | (1 << 4);
  200.               break;
  201.             case 4:
  202.               PUERTO_LEDS = B00000000;
  203.               PUERTO_LEDS = PUERTO_LEDS | (1 << 3);
  204.               break;
  205.             case 5:
  206.               PUERTO_LEDS = B00000000;
  207.               PUERTO_LEDS = PUERTO_LEDS | (1 << 2);
  208.               break;
  209.             case 6:
  210.               PUERTO_LEDS = B00000000;
  211.               PUERTO_LEDS = PUERTO_LEDS | (1 << 1);
  212.               break;
  213.             case 7:
  214.               PUERTO_LEDS = B00000000;
  215.               PUERTO_LEDS = PUERTO_LEDS | (1 << 0);
  216.               break;
  217.  
  218.  
  219.           }
  220.  
  221.           contador++;
  222.  
  223.           if (contador > 7) contador = 0;
  224.         }
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.         break;
  236.  
  237.       case 2:
  238.  
  239.         PUERTO_LEDS = B00000000;
  240.  
  241.       default:
  242.         break;
  243.  
  244.     }
  245.   }
  246.  
  247. }
  248.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement