Files
@ f94ab6abb81d
Branch filter:
Location: therm-ng/src/buttons.c - annotation
f94ab6abb81d
2.3 KiB
text/plain
Initial import
f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d f94ab6abb81d | /*
* buttons.c
*
* Created on: Oct 22, 2016
* Author: Nicholas Orlando
*/
#include "stm32f3xx_hal.h"
#include "stm32f3xx.h"
#include "gpio.h"
#include "ssd1306.h"
#include "buttons.h"
#include <math.h>
uint32_t last_button_debounce_time = 0; // the system time at which the button values were last checked
uint32_t debounce_resolution = 5; // period in which to check pin state in milliseconds
float filter_fraction = 0.2; // a number between 0 and 1, which adjusts the heaviness of the filter.
// 0 = never changes and 1 = no filter at all.
uint8_t l_thresh = 20; //lower threshold for when then button is considered pressed vs not pressed.
uint8_t u_thresh = 80; //upper threshold for when then button is considered pressed vs not pressed.
uint8_t temp_counter = 0; // temporary counter for testing purposes
float sw_btn_avg = 0; // some sort of running average
uint8_t sw_btn_state = NOT_PRESSED; // the state of the pin after filtering
uint8_t sw_btn_old_state = NOT_PRESSED; // the state of the pin after filtering
void freaking_debounce(void)
{
if(HAL_GetTick() - last_button_debounce_time > debounce_resolution)
{
char buffer[256]; // needed for writing stuff to screen
//averaging to filter button presses
if(HAL_GPIO_ReadPin(SW_BTN) == GPIO_PIN_RESET)
{
sw_btn_avg = sw_btn_avg + filter_fraction * (100 - sw_btn_avg);
}
else
{
sw_btn_avg = sw_btn_avg + filter_fraction * (0 - sw_btn_avg);
}
// check to see if the btn average value has crossed a threshold
if(sw_btn_avg < l_thresh)
{
sw_btn_state = NOT_PRESSED;
// snprintf(buffer, 256, "NOT_PRESSED");
// ssd1306_drawstring(buffer, 1, 0);
}
if(sw_btn_avg > u_thresh)
{
sw_btn_state = PRESSED;
// snprintf(buffer, 256, "PRESSED ");
// ssd1306_drawstring(buffer, 1, 0);
}
// do something when state has changed
if((sw_btn_state == PRESSED) && (sw_btn_old_state == NOT_PRESSED))
{
// temp_counter++;
// snprintf(buffer, 256, "%i", temp_counter);
// ssd1306_drawstring(buffer, 1, 0);
}
// snprintf(buffer, 256, "sw-btn-avg: %.1f", sw_btn_avg);
// ssd1306_drawstring(buffer, 2, 0);
// save previous button states
sw_btn_old_state = sw_btn_state;
last_button_debounce_time = HAL_GetTick();
}
}
|