Files
RP2350_MIDI_Lighter/Firmware/Switch.c
Chris 128d42c586 - Fixed drawing of round objects (Circles, Rounded Rects) using a lookup table
- Added function to read out the display_buffer via USB-Serial
 - Added basic structure and files for later complete firmware (still in progress)
 - Added Doc folder with schematic in it
 - Added Python script and batch file to read out the display buffer and open the image in gimp
2025-09-07 08:55:39 +02:00

95 lines
2.4 KiB
C

/*
* Switch.c
*
* Created: Sat Jan 28 2023 15:21:38
* Author Chris
*/
// ============================================================================================
// Includes
#include "Switch.h"
#include "pico/time.h"
#include "pico/types.h"
#include "pico/stdlib.h"
#include "hardware/gpio.h"
// ============================================================================================
// Defines
#define SWITCH_GPIO 23
#define GPIO_IRQ_LEVEL_LOW 1
#define GPIO_IRQ_LEVEL_HIGH 2
#define GPIO_IRQ_EDGE_FALL 4
#define GPIO_IRQ_EDGE_RISE 8
#define SWITCH_IDLE 1
#define SWITCH_PRESSED 0
#define DEBOUNCE_TIME_SWITCH_MS 300
// ============================================================================================
// Variables
volatile uint32_t _Debounce_Time_Switch_ms;
volatile bool _Switch_Press_Occurred;
// ============================================================================================
// Function Declarations
/*******************************************************************
Interrupt Service Routines
*******************************************************************/
// Interrupt Service Routine from Rotary Encoder also used for this one
// void ISR_Switch(uint gpio, uint32_t events)
// {
// if(gpio == SWITCH_GPIO)
// {
// uint32_t Current_Time_ms = to_ms_since_boot(get_absolute_time());
// if(Current_Time_ms < _Debounce_Time_Switch_ms)
// {
// return;
// }
// _Switch_Press_Occurred = true;
// _Debounce_Time_Switch_ms = Current_Time_ms + DEBOUNCE_TIME_SWITCH_MS;
// }
// }
/*******************************************************************
Functions
*******************************************************************/
void Switch_Init(bool use_pullup)
{
_Debounce_Time_Switch_ms = 0;
_Switch_Press_Occurred = false;
gpio_init(SWITCH_GPIO); gpio_set_dir(SWITCH_GPIO, false);
if(use_pullup == SWITCH_USE_INTERNAL_PULLUP) {
gpio_pull_up(SWITCH_GPIO);
}
// ISR from Rotery Encoder used for Switch as well. See file Rotary_Encoder.c
gpio_set_irq_enabled(SWITCH_GPIO, GPIO_IRQ_EDGE_FALL, true);
}
bool Switch_Press_Occurred(void)
{
bool Return_Value = _Switch_Press_Occurred;
_Switch_Press_Occurred = false;
return Return_Value;
}
/*******************************************************************
Internal Functions
*******************************************************************/