Repository navigation
Expand file tree
/
Copy pathInputHandler.cpp
More file actions
96 lines (87 loc) · 1.86 KB
/
Copy pathInputHandler.cpp
File metadata and controls
96 lines (87 loc) · 1.86 KB
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
#include "InputHandler.h"
InputHandler::InputHandler()
{
pinMode(START, INPUT);
pinMode(UP, INPUT);
pinMode(DOWN, INPUT);
pinMode(LEFT, INPUT);
pinMode(RIGHT, INPUT);
}
void InputHandler::init()
{
dir = prevDir = lastButtonPressed = xpos;
timeOfUpRelease = timeOfDownRelease = 0;
released = true;
}
bool InputHandler::startPressed()
{
return digitalRead(START) ? true : false;
}
void InputHandler::update()
{
if (digitalRead(UP))
{
lastButtonPressed = ypos;
// Detect double up press
if (prevDir != zneg && lastButtonPressed == ypos && (millis() - timeOfUpRelease < 150))
{
dir = zpos;
}
// Prevent direction switch if a double up press just occurred
else if (prevDir != yneg && (dir != zpos || (millis() - timeOfUpRelease > 400)))
{
dir = ypos;
}
released = false;
}
else if (digitalRead(DOWN))
{
lastButtonPressed = yneg;
// Detect double down press
if (prevDir != zpos && lastButtonPressed == yneg && (millis() - timeOfDownRelease < 150))
{
dir = zneg;
}
// Prevent direction switch if a double down press just occurred
else if (prevDir != ypos && (dir != zneg || (millis() - timeOfDownRelease > 400)))
{
dir = yneg;
}
released = false;
}
else if (digitalRead(RIGHT))
{
lastButtonPressed = xpos;
if (prevDir != xneg)
{
dir = xpos;
}
released = false;
}
else if (digitalRead(LEFT))
{
lastButtonPressed = xneg;
if (prevDir != xpos)
{
dir = xneg;
}
released = false;
}
// Detect up or down button releases
else if (!released)
{
if (lastButtonPressed == ypos)
{
timeOfUpRelease = millis();
}
else if (lastButtonPressed == yneg)
{
timeOfDownRelease = millis();
}
released = true;
}
}
void InputHandler::saveDir()
{
prevDir = dir;
}