Skip to content

Commit ea7d943

Browse files
add 3-axis joystick
1 parent c55e999 commit ea7d943

File tree

3 files changed

+105
-1
lines changed

3 files changed

+105
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
.DS_Store
22
*.pyc
3-
3+
.vscode/

Joystick3Axis/Joystick3Axis.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/* Copyright (c) 2022, Collab
2+
* All rights reserved
3+
*/
4+
/*
5+
Joystick3Axis.h - Control 3-axis joystick with button.
6+
*/
7+
8+
#include "Joystick3Axis.h"
9+
10+
Joystick3Axis::Joystick3Axis(
11+
int x_axis_pin,
12+
int y_axis_pin,
13+
int z_axis_pin,
14+
int button_pin
15+
) {
16+
_xAxisPin = x_axis_pin;
17+
_yAxisPin = y_axis_pin;
18+
_zAxisPin = z_axis_pin;
19+
_buttonPin = button_pin;
20+
}
21+
22+
void Joystick3Axis::begin() {
23+
// button
24+
pinMode(_buttonPin, INPUT_PULLUP);
25+
26+
// axes
27+
pinMode(_xAxisPin, INPUT);
28+
pinMode(_yAxisPin, INPUT);
29+
pinMode(_zAxisPin, INPUT);
30+
}
31+
32+
int Joystick3Axis::readButton() {
33+
return digitalRead(_buttonPin);
34+
}
35+
36+
int Joystick3Axis::readXAxis(int deadzone) {
37+
int value = analogRead(_xAxisPin);
38+
39+
return applyDeadzone(value, deadzone);
40+
}
41+
42+
int Joystick3Axis::readYAxis(int deadzone) {
43+
int value = analogRead(_yAxisPin);
44+
45+
return applyDeadzone(value, deadzone);
46+
}
47+
48+
int Joystick3Axis::readZAxis(int deadzone) {
49+
int value = analogRead(_zAxisPin);
50+
51+
return applyDeadzone(value, deadzone);
52+
}
53+
54+
int Joystick3Axis::applyDeadzone(int value, int deadzone, int min, int max) {
55+
value = map(value, 0, 4095, min, max);
56+
57+
if (value > deadzone) {
58+
value = value - deadzone;
59+
} else if (value < -deadzone) {
60+
value = value + deadzone;
61+
} else if (abs(value) < deadzone) {
62+
value = 0;
63+
} else {
64+
value = 0;
65+
}
66+
67+
return map(value, min + deadzone, max - deadzone, min, max);
68+
}

Joystick3Axis/Joystick3Axis.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* Copyright (c) 2022, Collab
2+
* All rights reserved
3+
*/
4+
/*
5+
Joystick3Axis.h - Control 3-axis joystick with button.
6+
*/
7+
#ifndef Joystick3Axis_h
8+
#define Joystick3Axis_h
9+
10+
#include <Arduino.h>
11+
12+
class Joystick3Axis
13+
{
14+
public:
15+
Joystick3Axis(
16+
int x_axis_pin,
17+
int y_axis_pin,
18+
int z_axis_pin,
19+
int button_pin
20+
);
21+
void begin();
22+
int readButton();
23+
int readXAxis(int deadzone = 0);
24+
int readYAxis(int deadzone = 0);
25+
int readZAxis(int deadzone = 0);
26+
27+
private:
28+
int _xAxisPin;
29+
int _yAxisPin;
30+
int _zAxisPin;
31+
int _buttonPin;
32+
33+
int applyDeadzone(int value, int deadzone, int min = -512, int max = 512);
34+
};
35+
36+
#endif

0 commit comments

Comments
 (0)