#pragma once #include "../Helper/delay_helper.h" #include "stm32h5xx_hal_gpio.h" #include #include "../Helper/gpio_helper.hpp" class Key { private: static constexpr uint32_t kDebounceDelay = 20; GpioHelper::Gpio gpio; GPIO_PinState normalStatus; public: explicit Key(GpioHelper::Gpio gpio, GPIO_PinState normalStatus) : gpio(gpio), normalStatus(normalStatus) { GpioHelper::GpioInit(gpio, GPIO_MODE_INPUT, normalStatus ? GPIO_PULLUP : GPIO_PULLDOWN); } bool IsPressed() { auto reading = gpio.Read(); if (reading != normalStatus) { DelayMs(kDebounceDelay); reading = gpio.Read(); if (reading != normalStatus) { return true; } } return false; } };