Advertisement
hidromotic

LlaveConmutacion_Lucas

Jun 16th, 2020
1,308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.94 KB | None | 0 0
  1. /*
  2.  * Lucas Trento
  3.  * Llave de conmutacion.
  4.  * Cada flanco ascendente en las entradas,
  5.  * invierte el estado de una única salida.
  6.  */
  7.  
  8. //Led Test
  9. #define PIN_LED           13
  10. #define CONFIGURAR_LED    pinMode(PIN_LED, OUTPUT)
  11. #define ENCENDER_LED      digitalWrite(PIN_LED, HIGH)
  12. #define APAGAR_LED        digitalWrite(PIN_LED, LOW)
  13.  
  14. //Salida
  15. #define PIN_SALIDA0         A0
  16. #define CONFIGURAR_SALIDA0  pinMode(PIN_SALIDA0, OUTPUT)
  17. #define ACTIVAR_SALIDA0     digitalWrite(PIN_SALIDA0, HIGH)
  18. #define DESACTIVAR_SALIDA0  digitalWrite(PIN_SALIDA0, LOW)
  19.  
  20. #define PIN_SALIDA1         A1
  21. #define CONFIGURAR_SALIDA1  pinMode(PIN_SALIDA1, OUTPUT)
  22. #define ACTIVAR_SALIDA1     digitalWrite(PIN_SALIDA1, HIGH)
  23. #define DESACTIVAR_SALIDA1  digitalWrite(PIN_SALIDA1, LOW)
  24.  
  25. #define PIN_SALIDA2         A2
  26. #define CONFIGURAR_SALIDA2  pinMode(PIN_SALIDA2, OUTPUT)
  27. #define ACTIVAR_SALIDA2     digitalWrite(PIN_SALIDA2, HIGH)
  28. #define DESACTIVAR_SALIDA2  digitalWrite(PIN_SALIDA2, LOW)
  29.  
  30. #define PIN_SALIDA3         A3
  31. #define CONFIGURAR_SALIDA3  pinMode(PIN_SALIDA3, OUTPUT)
  32. #define ACTIVAR_SALIDA3     digitalWrite(PIN_SALIDA3, HIGH)
  33. #define DESACTIVAR_SALIDA3  digitalWrite(PIN_SALIDA3, LOW)
  34.  
  35. #define PIN_SALIDA4         A4
  36. #define CONFIGURAR_SALIDA4  pinMode(PIN_SALIDA4, OUTPUT)
  37. #define ACTIVAR_SALIDA4     digitalWrite(PIN_SALIDA4, HIGH)
  38. #define DESACTIVAR_SALIDA4  digitalWrite(PIN_SALIDA4, LOW)
  39.  
  40. #define PIN_SALIDA5         A5
  41. #define CONFIGURAR_SALIDA5  pinMode(PIN_SALIDA5, OUTPUT)
  42. #define ACTIVAR_SALIDA5     digitalWrite(PIN_SALIDA5, HIGH)
  43. #define DESACTIVAR_SALIDA5  digitalWrite(PIN_SALIDA5, LOW)
  44.  
  45. #define PUERTO_SALIDAS      PORTC
  46. #define CONFIGURAR_SALIDAS  DDRC=0xFF
  47.  
  48. //Entrada
  49. #define PIN_ENTRADA1        7
  50. #define CONFIGURAR_ENTRADA1 pinMode(PIN_ENTRADA1, INPUT)
  51. #define ENTRADA_ACTIVADA1   digitalRead(PIN_ENTRADA1)
  52.  
  53. #define PIN_ENTRADA2        6
  54. #define CONFIGURAR_ENTRADA2 pinMode(PIN_ENTRADA2, INPUT)
  55. #define ENTRADA_ACTIVADA2   digitalRead(PIN_ENTRADA2)
  56.  
  57. #define PIN_ENTRADA3        5
  58. #define CONFIGURAR_ENTRADA3 pinMode(PIN_ENTRADA3, INPUT)
  59. #define ENTRADA_ACTIVADA3   digitalRead(PIN_ENTRADA3)
  60.  
  61. #define INVERTIR_SALIDA     PUERTO_SALIDAS= PUERTO_SALIDAS ^ 1
  62.  
  63. void setup()
  64.   {
  65.    CONFIGURAR_LED;
  66.    CONFIGURAR_SALIDAS;
  67.    CONFIGURAR_ENTRADA1;
  68.    CONFIGURAR_ENTRADA2;
  69.    CONFIGURAR_ENTRADA3;
  70.   }
  71.  
  72. void loop(){
  73.    Led_Test();
  74.    LlaveConmutacion();
  75.    delay(1);
  76. }
  77.  
  78. void Led_Test(void){
  79.     static bool estado=0;
  80.     static unsigned long millis_ant=0;
  81.  
  82.     if(millis()-millis_ant < 1000) return;
  83.     millis_ant=millis();
  84.  
  85.     estado = !estado;
  86.  
  87.     if(estado)       ENCENDER_LED;
  88.     else             APAGAR_LED;
  89. }
  90.  
  91. void LlaveConmutacion(void){
  92.     static bool ent1_activada_ant = 0,
  93.                 ent2_activada_ant = 0,
  94.                 activar_salida = 0;
  95.  
  96.     // Si tengo un cambio en cualquiera de las 2 entradas
  97.     if((ENTRADA_ACTIVADA1 == ent1_activada_ant) && (ENTRADA_ACTIVADA2 == ent2_activada_ant))return;
  98.     ent1_activada_ant = ENTRADA_ACTIVADA1;
  99.     ent2_activada_ant = ENTRADA_ACTIVADA2;
  100.    
  101.     if(!ENTRADA_ACTIVADA1 && !ENTRADA_ACTIVADA2) return;
  102.  
  103.     //acción
  104.     INVERTIR_SALIDA;
  105.     /*
  106.     activar_salida = !activar_salida;
  107.  
  108.     if(activar_salida)  ACTIVAR_SALIDA5;
  109.     else                DESACTIVAR_SALIDA5;
  110.    */
  111.    //queremos invertir el bit 0, que es el asociado a la salida que elegimos
  112.  
  113. /*
  114.     PUERTO_SALIDAS= PUERTO_SALIDAS ^ (1<<0);
  115.                        
  116.     PUERTO_SALIDAS= 10010110
  117.     AND (|)
  118.     MASCARA =       11101111 --> ~(1<<4)
  119.                   ------------
  120.                     10000110
  121.                     */
  122.     //Resumen:
  123.     //~ --> Se utiliza para invertir cada uno de los bits
  124.     // XOR ^ --> Se utiliza para invertir determinados bits
  125.     // OR | --> Se utiliza para poner en uno determinados bits
  126.     // AND & --> Se utiliza para poner en cero determinados bits
  127.     //PUERTO_SALIDAS = activar_salida;  //00000001 ó 00000000
  128.     //
  129.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement