//#include #include "KnobEncoderCtrl.h" #include "BoardCfg.h" #include "LedLightCtrl.h" #include "timer.h" bool KnobDebounce; int KnobReadSM = KEC_WAIT_FOR_TRIGGER_STATE; #define PIN_ACTIVE 0 #define PIN_INACTIVE 1 //bool KnobDebounce; //void __ISR(_EXTERNAL_1_VECTOR , ipl2) KnobEncoderInterrupt(void) //{ // if(KnobDebounce == false) // { // int dir = KNOB_PH_B_PIN; // // KnobDebounce = true; // TimerStart(KNOB_DEBOUNCE_TIMER,KNOB_DEBOUNCE_TIMEOUT); // IEC0bits.INT1IE = 0; // // if(dir == 1) // { // LedLightIncrease(); // } // else // { // LedLightDecrease(); // } // } // // IFS0bits.INT1IF = 0; //} void KnobDebounceCtrlSM() { switch(KnobReadSM) { case KEC_CHECK_BTN_STATE: { if(KNOB_TGLE_BTN_PIN == PIN_ACTIVE) { LedLightONOFFBtnPressed(); KnobReadSM = KEC_DEBOUNCE_BTN_STATE; TimerStart(KNOB_DEBOUNCE_TIMER,250); } else { KnobReadSM = KEC_WAIT_FOR_TRIGGER_STATE; } break; } case KEC_DEBOUNCE_BTN_STATE: { if(IsTimerExpired(KNOB_DEBOUNCE_TIMER)) { KnobReadSM = KEC_WAIT_FOR_BTN_RST_STATE; } break; } case KEC_WAIT_FOR_BTN_RST_STATE: { if(KNOB_TGLE_BTN_PIN == PIN_INACTIVE) { KnobReadSM = KEC_WAIT_FOR_TRIGGER_STATE; } break; } case KEC_WAIT_FOR_TRIGGER_STATE: { if(KNOB_PH_A_PIN == PIN_ACTIVE) { if(KNOB_PH_B_PIN == PIN_ACTIVE) { LedLightIncrease(); } else { LedLightDecrease(); } TimerStart(KNOB_DEBOUNCE_TIMER,KNOB_DEBOUNCE_TIMEOUT); KnobReadSM = KEC_DEBOUNCE_STATE; } else { KnobReadSM = KEC_CHECK_BTN_STATE; } break; } case KEC_DEBOUNCE_STATE: { if(IsTimerExpired(KNOB_DEBOUNCE_TIMER)) { KnobReadSM = KEC_WAIT_FOR_RESET_STATE; } break; } case KEC_WAIT_FOR_RESET_STATE: { if((KNOB_PH_A_PIN == PIN_INACTIVE)) { if(KNOB_PH_B_PIN == PIN_INACTIVE) { TimerStart(KNOB_DEBOUNCE_TIMER,KNOB_DEBOUNCE_TIMEOUT); KnobReadSM = KEC_WAIT_A_LITTLE_MORE_STATE; } } break; } case KEC_WAIT_A_LITTLE_MORE_STATE: { if(IsTimerExpired(KNOB_DEBOUNCE_TIMER)) { KnobReadSM = KEC_CHECK_BTN_STATE; } break; } } }