- 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
This commit is contained in:
95
Firmware/Switch.c
Normal file
95
Firmware/Switch.c
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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
|
||||
*******************************************************************/
|
||||
Reference in New Issue
Block a user