Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

123 linhas
3.0 KiB

  1. //#include <proc/p32mx440f256h.h>
  2. #include "KnobEncoderCtrl.h"
  3. #include "BoardCfg.h"
  4. #include "LedLightCtrl.h"
  5. #include "timer.h"
  6. bool KnobDebounce;
  7. int KnobReadSM = KEC_WAIT_FOR_TRIGGER_STATE;
  8. #define PIN_ACTIVE 0
  9. #define PIN_INACTIVE 1
  10. //bool KnobDebounce;
  11. //void __ISR(_EXTERNAL_1_VECTOR , ipl2) KnobEncoderInterrupt(void)
  12. //{
  13. // if(KnobDebounce == false)
  14. // {
  15. // int dir = KNOB_PH_B_PIN;
  16. //
  17. // KnobDebounce = true;
  18. // TimerStart(KNOB_DEBOUNCE_TIMER,KNOB_DEBOUNCE_TIMEOUT);
  19. // IEC0bits.INT1IE = 0;
  20. //
  21. // if(dir == 1)
  22. // {
  23. // LedLightIncrease();
  24. // }
  25. // else
  26. // {
  27. // LedLightDecrease();
  28. // }
  29. // }
  30. //
  31. // IFS0bits.INT1IF = 0;
  32. //}
  33. void KnobDebounceCtrlSM()
  34. {
  35. switch(KnobReadSM)
  36. {
  37. case KEC_CHECK_BTN_STATE:
  38. {
  39. if(KNOB_TGLE_BTN_PIN == PIN_ACTIVE)
  40. {
  41. LedLightONOFFBtnPressed();
  42. KnobReadSM = KEC_DEBOUNCE_BTN_STATE;
  43. TimerStart(KNOB_DEBOUNCE_TIMER,250);
  44. }
  45. else
  46. {
  47. KnobReadSM = KEC_WAIT_FOR_TRIGGER_STATE;
  48. }
  49. break;
  50. }
  51. case KEC_DEBOUNCE_BTN_STATE:
  52. {
  53. if(IsTimerExpired(KNOB_DEBOUNCE_TIMER))
  54. {
  55. KnobReadSM = KEC_WAIT_FOR_BTN_RST_STATE;
  56. }
  57. break;
  58. }
  59. case KEC_WAIT_FOR_BTN_RST_STATE:
  60. {
  61. if(KNOB_TGLE_BTN_PIN == PIN_INACTIVE)
  62. {
  63. KnobReadSM = KEC_WAIT_FOR_TRIGGER_STATE;
  64. }
  65. break;
  66. }
  67. case KEC_WAIT_FOR_TRIGGER_STATE:
  68. {
  69. if(KNOB_PH_A_PIN == PIN_ACTIVE)
  70. {
  71. if(KNOB_PH_B_PIN == PIN_ACTIVE)
  72. {
  73. LedLightIncrease();
  74. }
  75. else
  76. {
  77. LedLightDecrease();
  78. }
  79. TimerStart(KNOB_DEBOUNCE_TIMER,KNOB_DEBOUNCE_TIMEOUT);
  80. KnobReadSM = KEC_DEBOUNCE_STATE;
  81. }
  82. else
  83. {
  84. KnobReadSM = KEC_CHECK_BTN_STATE;
  85. }
  86. break;
  87. }
  88. case KEC_DEBOUNCE_STATE:
  89. {
  90. if(IsTimerExpired(KNOB_DEBOUNCE_TIMER))
  91. {
  92. KnobReadSM = KEC_WAIT_FOR_RESET_STATE;
  93. }
  94. break;
  95. }
  96. case KEC_WAIT_FOR_RESET_STATE:
  97. {
  98. if((KNOB_PH_A_PIN == PIN_INACTIVE))
  99. {
  100. if(KNOB_PH_B_PIN == PIN_INACTIVE)
  101. {
  102. TimerStart(KNOB_DEBOUNCE_TIMER,KNOB_DEBOUNCE_TIMEOUT);
  103. KnobReadSM = KEC_WAIT_A_LITTLE_MORE_STATE;
  104. }
  105. }
  106. break;
  107. }
  108. case KEC_WAIT_A_LITTLE_MORE_STATE:
  109. {
  110. if(IsTimerExpired(KNOB_DEBOUNCE_TIMER))
  111. {
  112. KnobReadSM = KEC_CHECK_BTN_STATE;
  113. }
  114. break;
  115. }
  116. }
  117. }