-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSBUS-joystick.ino
117 lines (90 loc) · 4.45 KB
/
SBUS-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
/**
* A very simple HID joystick using a Teensy and SBUS receiver on RX1
*
* USB type = FlightSim Controls + Joystick (USB_FLIGHTSIM_JOYSTICK)
* Change JOYSTICK_SIZE from 12 to 64 in: <Path to Arduino IDE>\hardware\teensy\avr\cores\teensy3\usb_desc.h
*
* Sjoer van der Ploeg, 2018
**/
// SBUS range, check serial output to determine these values!
#define STARTPOINT 221
#define ENDPOINT 1824
// Channel mapping
#define PITCH 1
#define ROLL 2
#define THROTTLE 3
#define YAW 4
#define AUX1 5
#define AUX2 6
#define SWA 7
#define SWB 8
#define SWC 9
#define SWD 10
#define SWE 11
#define SWF 12
#define SWG 13
#define SWH 14
#include "SBUS.h"
SBUS sbus(Serial1);
uint16_t channels[16];
bool failSafe, lostFrame;
void setup()
{
Serial.begin(115200);
sbus.begin();
Joystick.useManualSend(true);
}
void sentSerial()
{
for (uint8_t _i = 0; _i < sizeof(channels) / sizeof(uint16_t); _i++)
{
Serial.print(String(_i) + F(": "));
Serial.print(channels[_i]);
if (_i < sizeof(channels) / sizeof(uint16_t) - 1)
Serial.print(F(" "));
else
Serial.println();
}
Serial.print(F("Failsafe: "));
Serial.print(failSafe);
Serial.print(F("\tFrame lost: "));
Serial.println(lostFrame);
}
void loop()
{
if(sbus.read(&channels[0], &failSafe, &lostFrame))
{
Joystick.X(map(channels[ROLL - 1], STARTPOINT, ENDPOINT, 0, 65535));
Joystick.Y(map(channels[PITCH - 1], STARTPOINT, ENDPOINT, 0, 65535));
Joystick.Z(map(channels[THROTTLE - 1], STARTPOINT, ENDPOINT, 0, 65535));
Joystick.Xrotate(map(channels[AUX1 - 1], STARTPOINT, ENDPOINT, 0, 65535));
Joystick.Yrotate(map(channels[AUX2 - 1], STARTPOINT, ENDPOINT, 0, 65535));
Joystick.Zrotate(map(channels[YAW - 1], STARTPOINT, ENDPOINT, 0, 65535));
Joystick.button(1, map(channels[SWA - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWA LOW = button 1
Joystick.button(2, map(channels[SWA - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWA MID = button 2
Joystick.button(3, map(channels[SWA - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWA HIGH = button 3
Joystick.button(4, map(channels[SWB - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 4
Joystick.button(5, map(channels[SWB - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 5
Joystick.button(6, map(channels[SWB - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 6
Joystick.button(7, map(channels[SWC - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 7
Joystick.button(8, map(channels[SWC - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 8
Joystick.button(9, map(channels[SWC - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 9
Joystick.button(10, map(channels[SWD - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 10
Joystick.button(11, map(channels[SWD - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 11
Joystick.button(12, map(channels[SWD - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 12
Joystick.button(13, map(channels[SWE - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 13
Joystick.button(14, map(channels[SWE - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 14
Joystick.button(15, map(channels[SWE - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 15
Joystick.button(16, map(channels[SWF - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 16
Joystick.button(17, map(channels[SWF - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 17
Joystick.button(18, map(channels[SWF - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 18
Joystick.button(19, map(channels[SWG - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 19
Joystick.button(20, map(channels[SWG - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 20
Joystick.button(21, map(channels[SWG - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 21
Joystick.button(22, map(channels[SWH - 1], STARTPOINT, ENDPOINT, 0, 2) == 0 ? 1 : 0); // SWB LOW = button 22
Joystick.button(23, map(channels[SWH - 1], STARTPOINT, ENDPOINT, 0, 2) == 1 ? 1 : 0); // SWB MID = button 23
Joystick.button(24, map(channels[SWH - 1], STARTPOINT, ENDPOINT, 0, 2) == 2 ? 1 : 0); // SWB HIGH = button 24
Joystick.send_now();
}
sentSerial();
}