-
Notifications
You must be signed in to change notification settings - Fork 0
/
joystick.ino
137 lines (104 loc) · 2.6 KB
/
joystick.ino
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
135
136
137
#define DEBUG 0
//#define DEBUG 1
#define TRIGGER_BUTTON_PIN A0
#define THUMB_BUTTON_PIN A1
#define X_AXIS_PIN A2
#define Y_AXIS_PIN A3
#define BUTTON_THRESHOLD 900 //This determines if button is pressed or not (900/1024 * 5V)
void print_debug_message(const char *name, int value) {
Serial.print(name);
Serial.print(":");
Serial.print(value);
Serial.print(" ");
}
int TriggerButtonPreviousValue = 0;
int ThumbsButtonPreviousValue = 0;
int XAxisPreviousValue = 0;
int YAxisPreviousValue = 0;
int buttonValueToSend(int value) {
if (value > BUTTON_THRESHOLD) {
return 0;
}
else {
return 1;
}
}
int axisValueToSend(int value) {
if (value < BUTTON_THRESHOLD) {
return 0;
}
else {
return 1;
}
}
void sendButton(char command, int pinValue, int *previousValue) {
int currentButtonValue;
currentButtonValue = buttonValueToSend(pinValue);
if (currentButtonValue != *previousValue) {
Serial.print(command);
Serial.print(currentButtonValue);
}
*previousValue = currentButtonValue;
}
void sendAxis(char command, int pinValue, int *previousValue) {
int currentAxisValue;
currentAxisValue = axisValueToSend(pinValue);
if (currentAxisValue != *previousValue) {
Serial.print(command);
Serial.print(currentAxisValue);
}
*previousValue = currentAxisValue;
}
void send_movement(int pin, int pinValue) {
switch(pin){
case A0:
sendButton('a', pinValue, &TriggerButtonPreviousValue);
break;
case A1:
sendButton('b', pinValue, &ThumbsButtonPreviousValue);
break;
case A2:
sendAxis('x', pinValue, &XAxisPreviousValue);
break;
case A3:
sendAxis('y', pinValue, &YAxisPreviousValue);
break;
}
}
int readAnalogPin(int pin, int mode) {
pinMode(pin, mode);
int pinValue = analogRead(pin);
return pinValue;
}
void reportButtonOrAxis(const char *name, int pin) {
int pinValue = readAnalogPin(pin, INPUT_PULLUP);
if (DEBUG) {
print_debug_message(name, pinValue);
}
else {
send_movement(pin, pinValue);
}
}
const char trigger_button[] = "Fire Button:";
const char thumb_button[] = "Thumb Button:";
const char x_axis[] = "X:";
const char y_axis[] = "Y:";
void gatherJoystickData() {
reportButtonOrAxis(trigger_button, TRIGGER_BUTTON_PIN);
reportButtonOrAxis(thumb_button, THUMB_BUTTON_PIN);
reportButtonOrAxis(x_axis, X_AXIS_PIN);
reportButtonOrAxis(y_axis, Y_AXIS_PIN);
}
void setup() {
Serial.begin(9600);
}
void loop() {
gatherJoystickData();
if (DEBUG) {
Serial.println();
delay(200);
}
else {
delay(100);
}
}