inital commit
This commit is contained in:
44
buttons.h
Normal file
44
buttons.h
Normal file
@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
|
||||
#include <avr/io.h>
|
||||
#include "writepin.h"
|
||||
|
||||
class Buttons
|
||||
{
|
||||
public:
|
||||
|
||||
static constexpr uint8_t PRESSED = 0;
|
||||
static constexpr uint8_t LONG_PRESSED = 1;
|
||||
static constexpr uint8_t RELEASED = 2;
|
||||
|
||||
private:
|
||||
volatile uint8_t * const pinReg = &PIND;
|
||||
static constexpr uint8_t button[] = { PD5, PD6 };
|
||||
static constexpr uint8_t buttonsAmount = sizeof(button);
|
||||
uint8_t buttonCount[buttonsAmount] = {};
|
||||
|
||||
void* _userData;
|
||||
void (*_eventHandler)(uint8_t index, uint8_t type, void* data);
|
||||
|
||||
public:
|
||||
Buttons(void (*eventHandler)(uint8_t index, uint8_t type, void* data), void* userData = nullptr): _userData(userData), _eventHandler(eventHandler){}
|
||||
void tick();
|
||||
};
|
||||
|
||||
void Buttons::tick()
|
||||
{
|
||||
for(uint8_t i = 0; i < buttonsAmount; ++i)
|
||||
{
|
||||
if(readPin(pinReg, button[i]) == true)
|
||||
{
|
||||
if(buttonCount[i] > 2) _eventHandler(i, RELEASED, _userData);
|
||||
buttonCount[i] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(buttonCount[i] == 3) _eventHandler(i, PRESSED, _userData);
|
||||
else if(buttonCount[i] == 100) _eventHandler(i, LONG_PRESSED, _userData);
|
||||
++buttonCount[i];
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user