diff --git a/src/uibuttons.cpp b/src/uibuttons.cpp index 7d70364..fd7b676 100644 --- a/src/uibuttons.cpp +++ b/src/uibuttons.cpp @@ -364,3 +364,11 @@ void CUIButtons::Update (void) } } +void CUIButtons::ResetButton (unsigned pinNumber) +{ + for (unsigned i=0; i<MAX_BUTTONS; i++) { + if (m_buttons[i].getPinNumber() == pinNumber) { + m_buttons[i].reset(); + } + } +} diff --git a/src/uibuttons.h b/src/uibuttons.h index 2070018..4bb9408 100644 --- a/src/uibuttons.h +++ b/src/uibuttons.h @@ -113,6 +113,8 @@ public: void RegisterEventHandler (BtnEventHandler *handler, void *param = 0); void Update (void); + + void ResetButton (unsigned pinNumber); private: // Up to 5 buttons can be defined diff --git a/src/userinterface.cpp b/src/userinterface.cpp index 034565c..26af48d 100644 --- a/src/userinterface.cpp +++ b/src/userinterface.cpp @@ -224,13 +224,26 @@ void CUserInterface::EncoderEventHandler (CKY040::TEvent Event) break; case CKY040::EventClockwise: - m_Menu.EventHandler (m_bSwitchPressed ? CUIMenu::MenuEventPressAndStepUp - : CUIMenu::MenuEventStepUp); + if (m_bSwitchPressed) { + // We must reset the encoder switch button to prevent events from being + // triggered after the encoder is rotated + m_pUIButtons->ResetButton(m_pConfig->GetEncoderPinSwitch()); + m_Menu.EventHandler(CUIMenu::MenuEventPressAndStepUp); + + } + else { + m_Menu.EventHandler(CUIMenu::MenuEventStepUp); + } break; case CKY040::EventCounterclockwise: - m_Menu.EventHandler (m_bSwitchPressed ? CUIMenu::MenuEventPressAndStepDown - : CUIMenu::MenuEventStepDown); + if (m_bSwitchPressed) { + m_pUIButtons->ResetButton(m_pConfig->GetEncoderPinSwitch()); + m_Menu.EventHandler(CUIMenu::MenuEventPressAndStepDown); + } + else { + m_Menu.EventHandler(CUIMenu::MenuEventStepDown); + } break; case CKY040::EventSwitchHold: