mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-05-29 10:41:27 +02:00
Updated Drivers
This commit is contained in:
@@ -46,26 +46,41 @@
|
||||
#define LED_PIN 25
|
||||
#define DEBOUNCE_MS 20
|
||||
|
||||
|
||||
/**
|
||||
* @brief Poll button state and report edge transitions over UART
|
||||
*
|
||||
* Reads the debounced button state, mirrors it to the LED, and prints
|
||||
* a message when the state changes from the previous reading.
|
||||
*
|
||||
* @param last_state Pointer to the stored previous button state
|
||||
*/
|
||||
static void _poll_button(bool *last_state) {
|
||||
bool pressed = button_is_pressed(BUTTON_PIN);
|
||||
button_led_set(LED_PIN, pressed);
|
||||
if (pressed != *last_state) {
|
||||
printf("Button: %s\r\n", pressed ? "PRESSED" : "RELEASED");
|
||||
*last_state = pressed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Application entry point for the button debounce demo
|
||||
*
|
||||
* Initializes button and LED, then continuously polls button state
|
||||
* and mirrors it to the LED with UART reporting on edge transitions.
|
||||
*
|
||||
* @return int Does not return
|
||||
*/
|
||||
int main(void) {
|
||||
stdio_init_all();
|
||||
button_init(BUTTON_PIN, DEBOUNCE_MS);
|
||||
button_led_init(LED_PIN);
|
||||
|
||||
printf("Button driver initialized: button=GPIO%d led=GPIO%d\r\n",
|
||||
BUTTON_PIN, LED_PIN);
|
||||
|
||||
printf("Button driver initialized: button=GPIO%d led=GPIO%d\r\n", BUTTON_PIN, LED_PIN);
|
||||
bool last_state = false;
|
||||
|
||||
while (true) {
|
||||
bool pressed = button_is_pressed(BUTTON_PIN);
|
||||
|
||||
button_led_set(LED_PIN, pressed);
|
||||
|
||||
if (pressed != last_state) {
|
||||
printf("Button: %s\r\n", pressed ? "PRESSED" : "RELEASED");
|
||||
last_state = pressed;
|
||||
}
|
||||
|
||||
_poll_button(&last_state);
|
||||
sleep_ms(10);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
static uint32_t debounce_delay_ms = 20;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Confirm a raw active-low pin read by waiting for the debounce period
|
||||
*
|
||||
@@ -43,11 +44,12 @@ static uint32_t debounce_delay_ms = 20;
|
||||
* @param pin GPIO pin number to re-sample
|
||||
* @return bool true if the pin is still low after the debounce delay
|
||||
*/
|
||||
static bool debounce_confirm(uint32_t pin) {
|
||||
static bool _debounce_confirm(uint32_t pin) {
|
||||
sleep_ms(debounce_delay_ms);
|
||||
return !gpio_get(pin);
|
||||
}
|
||||
|
||||
|
||||
void button_init(uint32_t pin, uint32_t debounce_ms) {
|
||||
debounce_delay_ms = debounce_ms;
|
||||
gpio_init(pin);
|
||||
@@ -55,19 +57,26 @@ void button_init(uint32_t pin, uint32_t debounce_ms) {
|
||||
gpio_pull_up(pin);
|
||||
}
|
||||
|
||||
|
||||
bool button_is_pressed(uint32_t pin) {
|
||||
if (!gpio_get(pin)) {
|
||||
return debounce_confirm(pin);
|
||||
return _debounce_confirm(pin);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void button_led_init(uint32_t pin) {
|
||||
gpio_init(pin);
|
||||
gpio_set_dir(pin, GPIO_OUT);
|
||||
gpio_put(pin, false);
|
||||
}
|
||||
|
||||
|
||||
void button_led_set(uint32_t pin, bool on) {
|
||||
gpio_put(pin, on);
|
||||
}
|
||||
|
||||
void button_led_set(uint32_t pin, bool on) {
|
||||
gpio_put(pin, on);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user