inital version

This commit is contained in:
2020-05-27 20:38:58 +02:00
commit 7b936642ad
21 changed files with 1850 additions and 0 deletions

48
buttons.h Normal file
View File

@ -0,0 +1,48 @@
#pragma once
#include <avr/io.h>
#include "writepin.h"
class Buttons
{
public:
static constexpr uint8_t PRESSED = 0;
static constexpr uint8_t RELEASED = 2;
static constexpr uint8_t LONG_PRESSED = 1;
static constexpr uint8_t LONG_RELEASED= 3;
private:
volatile uint8_t * const pinReg = &PIND;
static constexpr uint16_t usPerTick = 1000;
static constexpr uint8_t button[] = { PD6, PD7 };
static constexpr uint8_t buttonsAmount = sizeof(button);
uint32_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]*usPerTick >= 1000000) _eventHandler(i, LONG_RELEASED, _userData);
else if(buttonCount[i]*usPerTick >= 30000)_eventHandler(i, RELEASED, _userData);
buttonCount[i] = 0;
}
else
{
if(buttonCount[i]*usPerTick == 30000) _eventHandler(i, PRESSED, _userData);
else if(buttonCount[i]*usPerTick == 1000000) _eventHandler(i, LONG_PRESSED, _userData);
++buttonCount[i];
}
}
}