#define NBUTTONS (int) 1
#define T_BOUNCE 50L
const int DS = 11;
const int ST = 8;
const int SC = 12;
const int BT[] = { A0, A1, A2, A3, A4, A5, 3, 2 };
const char BUFFER[256];
typedef enum btn_type {
PRESS,
SWITCH
} btn_type_t;
typedef void (*btn_callback_t) (void *data);
typedef struct btn_callback_range {
long minimum;
long interval;
long maximum;
btn_callback_t btn_callback;
} btn_callback_range_t;
typedef struct button {
int pin;
btn_type_t type;
long fp; // first high signal
long ds; // first debounced signal
long lcb; // last signal
int ncb;
btn_callback_range_t *hi_callbacks;
btn_callback_t lo_callback;
} button_t;
int16_t value = 0;
int8_t units[] = {0,0,0};
unsigned long bl;
int8_t digits[] = {
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111
};
button_t *buttons;
void setup() {
initializeButtons();
}
static void initializeButtons() {
buttons = (button_t *)malloc(NBUTTONS * sizeof(button_t));
memset(buttons, 0, NBUTTONS * sizeof(button_t));
for(int i = 0; i < NBUTTONS; ++i) {
buttons[i].pin = BT[i];
buttons[i].type = PRESS;
buttons[i].fp = -1L;
buttons[i].ds = -1L;
buttons[i].lcb = -1L;
buttons[i].ncb = 0;
pinMode(buttons[i].pin, INPUT);
}
buttons[NBUTTONS - 1].type = SWITCH;
}
void loop() {
checkButtons();
delay(10);
}
static void checkButtons() {
long milli = (long) millis();
for(int i = 0; i < NBUTTONS; ++i) {
if(digitalRead(buttons[i].pin) == HIGH) {
if(buttons[i].fp == -1L) {
buttons[i].fp = milli;
} else if(buttons[i].ds == -1L) {
if(milli - buttons[i].fp > T_BOUNCE) {
buttons[i].ds = milli;
checkButtonInterval(milli, buttons + i);
}
} else {
checkButtonInterval(milli, buttons + i);
}
}
else {
if((buttons[i].fp >= 0 && (milli - buttons[i].fp > T_BOUNCE)) || buttons[i].ds >= 0) {
buttons[i].fp = buttons[i].ds = buttons[i].lcb = -1L;
}
}
}
}
static void checkButtonInterval(const long milli, const button_t *button) {
}
Inn/Clr
Runs
Overs
Wkts
Balls