2025-02-15 11:05:28 -05:00

123 lines
3.0 KiB
C

//#include <proc/p32mx440f256h.h>
#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;
}
}
}