-
Notifications
You must be signed in to change notification settings - Fork 0
/
Interrupts.h
134 lines (112 loc) · 2.77 KB
/
Interrupts.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifndef __INTERRUPT_H__
#define __INTERRUPT_H__
#include <Arduino.h>
#include "ClockLEDs.h"
#include "Config.h"
#include "Game.hpp"
static const unsigned long DEBOUNCE_TIMEOUT{300};
static const unsigned long BUTTON_DEBOUNCE_TIMEOUT{1000};
static const unsigned long WIRE_DEBOUNCE_TIMEOUT{200};
extern ClockLEDs leds;
extern Game game;
void IRAM_ATTR isrStartButton()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > BUTTON_DEBOUNCE_TIMEOUT)
{
game.pushEvent(Game::Event::START_RESET);
last_millis = curr_millis;
}
}
void IRAM_ATTR isrHardcoreButton()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > BUTTON_DEBOUNCE_TIMEOUT)
{
game.pushEvent(Game::Event::SET_HARDCORE);
last_millis = curr_millis;
}
}
void IRAM_ATTR isrTimedButton()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > BUTTON_DEBOUNCE_TIMEOUT)
{
game.pushEvent(Game::Event::SET_TIMED);
last_millis = curr_millis;
}
}
void IRAM_ATTR isrResetButton()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > BUTTON_DEBOUNCE_TIMEOUT)
{
game.pushEvent(Game::Event::RESET_HIGHSCORE);
last_millis = curr_millis;
}
}
void IRAM_ATTR isrWireContact()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > WIRE_DEBOUNCE_TIMEOUT)
{
game.pushEvent(Game::Event::WIRE_CONTACT);
last_millis = curr_millis;
}
}
void IRAM_ATTR isrEndContact()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > WIRE_DEBOUNCE_TIMEOUT)
{
game.pushEvent(Game::Event::END_CONTACT);
last_millis = curr_millis;
}
}
//
// old
//
/*
void IRAM_ATTR isr_button1()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > DEBOUNCE_TIMEOUT)
{
// leds.next();
// leds.prev();
last_millis = curr_millis;
}
}
void IRAM_ATTR isr_button2()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > DEBOUNCE_TIMEOUT)
{
// leds.prev();
last_millis = curr_millis;
}
}
void IRAM_ATTR isr_button3()
{
static unsigned long last_millis{0};
unsigned long curr_millis{millis()};
if(curr_millis - last_millis > DEBOUNCE_TIMEOUT)
{
// leds.nextCathode();
last_millis = curr_millis;
}
}
void IRAM_ATTR isr_timer0()
{
leds.next();
}
*/
#endif