- 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
95 lines
2.4 KiB
C
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
|
|
*******************************************************************/ |