diff --git a/Inc/DS_Button.h b/Inc/DS_Button.h index afed754..e5a1d07 100644 --- a/Inc/DS_Button.h +++ b/Inc/DS_Button.h @@ -7,6 +7,10 @@ #include "stm32g0xx_hal.h" #endif +#ifdef STM32G0B1xx + #include "stm32g0xx_hal.h" +#endif + #ifdef STM32F030xx #include "stm32f0xx_hal.h" #endif @@ -16,7 +20,7 @@ typedef struct DS_Button { GPIO_TypeDef* Port; uint16_t Pin; - bool Presed, Released, PresedLong, PresedLongLong; + bool Pressed, Released, PressedLong, PressedLongLong; uint32_t PrevTick, PressStartTick, PressStartTickLong; uint8_t Storage; @@ -38,6 +42,6 @@ bool DS_ButtonPressedLongLong(DS_Button* Button); bool DS_ButtonRisingEdge(DS_Button* Button); -bool DS_ButtonFalingEdge(DS_Button* Button); +bool DS_ButtonFallingEdge(DS_Button* Button); #endif //DS_BUTTON_H \ No newline at end of file diff --git a/Src/DS_Button.c b/Src/DS_Button.c index 138df20..9180b23 100644 --- a/Src/DS_Button.c +++ b/Src/DS_Button.c @@ -1,24 +1,22 @@ #include "../inc/DS_Button.h" -void DS_ButtonInit(DS_Button* Button, GPIO_TypeDef *Port, uint16_t Pin) -{ - Button->Port = Port; - Button->Pin = Pin; - Button->Presed = false; - Button->PresedLong = false; - Button->PresedLongLong = false; - Button->Released = false; - Button->PrevTick = 0; - Button->PressStartTick = 0; - Button->PressStartTickLong = 0; - Button->Storage = 5; - - Button->FallingEdge = false; - Button->RisingEdge = false; +void DS_ButtonInit(DS_Button *Button, GPIO_TypeDef *Port, uint16_t Pin) { + Button->Port = Port; + Button->Pin = Pin; + Button->Pressed = false; + Button->PressedLong = false; + Button->PressedLongLong = false; + Button->Released = false; + Button->PrevTick = 0; + Button->PressStartTick = 0; + Button->PressStartTickLong = 0; + Button->Storage = 5; // Начальное среднее положение для стабилизации + + Button->FallingEdge = false; + Button->RisingEdge = false; } -void DS_ButtonUpdate(DS_Button *Button) -{ + void DS_ButtonUpdate(DS_Button * Button) { uint32_t CurrentTick = HAL_GetTick(); if ((CurrentTick - Button->PrevTick) < 10) return; @@ -31,19 +29,19 @@ void DS_ButtonUpdate(DS_Button *Button) { if (Button->Storage == 0) Button->Storage +=5; - else if (Button->Storage <= 10) + else if (Button->Storage < 10) Button->Storage +=1; if (Button->PressStartTick == 0) Button->PressStartTick = CurrentTick; else if ((CurrentTick-Button->PressStartTick)>1000) - Button->PresedLong = true; + Button->PressedLong = true; if (Button->PressStartTickLong == 0) Button->PressStartTickLong = CurrentTick; else if ((CurrentTick-Button->PressStartTickLong)>5000) - Button->PresedLongLong = true; + Button->PressedLongLong = true; @@ -57,10 +55,10 @@ void DS_ButtonUpdate(DS_Button *Button) Button->Storage -=1; Button->PressStartTick = 0; - Button->PresedLong = false; + Button->PressedLong = false; Button->PressStartTickLong = 0; - Button->PresedLongLong = false; + Button->PressedLongLong = false; } switch (Button->Storage) @@ -70,16 +68,16 @@ void DS_ButtonUpdate(DS_Button *Button) { Button->FallingEdge = true; } - Button->Presed = false; + Button->Pressed = false; Button->Released = true; break; case 10: - if (Button->Presed == false) + if (Button->Pressed == false) { Button->RisingEdge = true; } - Button->Presed = true; + Button->Pressed = true; Button->Released = false; break; @@ -91,7 +89,7 @@ void DS_ButtonUpdate(DS_Button *Button) bool DS_ButtonPressed(DS_Button *Button) { - if (Button->Presed) + if (Button->Pressed) { return true; } @@ -109,9 +107,9 @@ bool DS_ButtonReleased(DS_Button *Button) bool DS_ButtonPressedLong(DS_Button *Button) { - if (Button->PresedLong) + if (Button->PressedLong) { - Button->PresedLong = false; + Button->PressedLong = false; Button->PressStartTick = Button->PressStartTick + 500; return true; } @@ -120,10 +118,10 @@ bool DS_ButtonPressedLong(DS_Button *Button) bool DS_ButtonPressedLongLong(DS_Button *Button) { - if (Button->PresedLongLong) + if (Button->PressedLongLong) { Button->PressStartTick = 0; - Button->PresedLongLong = false; + Button->PressedLongLong = false; Button->PressStartTickLong = Button->PressStartTickLong+500; return true; } @@ -140,7 +138,7 @@ bool DS_ButtonRisingEdge(DS_Button *Button) return false; } -bool DS_ButtonFalingEdge(DS_Button *Button) +bool DS_ButtonFallingEdge(DS_Button *Button) { if (Button->FallingEdge) {