Linux compatibility #1
|
@ -1,6 +1,6 @@
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Throttle Quadrant using Arduino Micro & slide potentiometers
|
* Throttle Quadrant using Arduino Micro & slide potentiometers
|
||||||
* version 1.0
|
* version 1.1
|
||||||
*
|
*
|
||||||
* https://github.com/jarnorankinen/ThrottleQuadrant
|
* https://github.com/jarnorankinen/ThrottleQuadrant
|
||||||
*
|
*
|
||||||
|
@ -24,7 +24,8 @@
|
||||||
* - Upload to Arduino
|
* - Upload to Arduino
|
||||||
* - Repeat for each axis
|
* - Repeat for each axis
|
||||||
*
|
*
|
||||||
* Future features: input averaging to filter the slight movements of levers in simulator
|
* v1.1 Switched to Joystick.h (single joystick library) for hassle-free Linux support. Changed behavior to update joystick axis output value
|
||||||
|
* only if raw value changes more than +/-3, to filter input and allow simultaneous keyboard control.
|
||||||
*
|
*
|
||||||
**********************************************************************************/
|
**********************************************************************************/
|
||||||
|
|
||||||
|
@ -32,35 +33,51 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "Joystick3.h"
|
#include "Joystick.h"
|
||||||
|
#define Joystick_includeRxAxis false
|
||||||
|
#define Joystick_includeRyAxis false
|
||||||
|
#define Joystick_includeRzAxis false
|
||||||
|
|
||||||
uint16_t xa = 0; // raw data from the slider
|
uint16_t throttle_l = 0; // raw data from the slider
|
||||||
uint16_t xamin = 14, xamax = 236; //min & max values for calibration
|
uint16_t throttle_lmin = 14, throttle_lmax = 236; //min & max values for calibration
|
||||||
int xa_axis = 0; // the value to give to the Joystick axis
|
int throttle_l_axis = 0; // the value to give to the Joystick axis
|
||||||
|
int tl_old = 0;
|
||||||
|
|
||||||
uint16_t ya = 0;
|
uint16_t throttle_r = 0;
|
||||||
uint16_t yamin = 14, yamax = 234;
|
uint16_t throttle_rmin = 14, throttle_rmax = 234;
|
||||||
int ya_axis = 0;
|
int throttle_r_axis = 0;
|
||||||
|
int tr_old = 0;
|
||||||
|
|
||||||
uint16_t xb = 0;
|
uint16_t prop_l = 0;
|
||||||
uint16_t xbmin = 14, xbmax = 226;
|
uint16_t prop_lmin = 14, prop_lmax = 226;
|
||||||
int xb_axis = 0;
|
int prop_l_axis = 0;
|
||||||
|
int pl_old = 0;
|
||||||
|
|
||||||
uint16_t yb = 0;
|
uint16_t prop_r = 0;
|
||||||
uint16_t ybmin = 14, ybmax = 232;
|
uint16_t prop_rmin = 14, prop_rmax = 232;
|
||||||
int yb_axis = 0;
|
int prop_r_axis = 0;
|
||||||
|
int pr_old = 0;
|
||||||
|
|
||||||
uint16_t xc = 0;
|
uint16_t mix_l = 0;
|
||||||
uint16_t xcmin = 15, xcmax = 231;
|
uint16_t mix_lmin = 15, mix_lmax = 231;
|
||||||
int xc_axis = 0;
|
int mix_l_axis = 0;
|
||||||
|
int ml_old = 0;
|
||||||
|
|
||||||
uint16_t yc = 0;
|
uint16_t mix_r = 0;
|
||||||
uint16_t ycmin = 15, ycmax = 235;
|
uint16_t mix_rmin = 15, mix_rmax = 235;
|
||||||
int yc_axis = 0;
|
int mix_r_axis = 0;
|
||||||
|
int mr_old = 0;
|
||||||
|
|
||||||
|
double rotation_multip = 1.591;
|
||||||
|
|
||||||
/************* SET THIS AS true TO TURN CALIBRATION ON********************/
|
/************* SET THIS AS true TO TURN CALIBRATION ON********************/
|
||||||
bool calib = false; //Serial monitor on/off
|
bool calib = false; //Serial monitor on/off
|
||||||
|
|
||||||
|
unsigned int delta(uint16_t a, uint16_t b) {
|
||||||
|
int x = a - b;
|
||||||
|
return abs(x);
|
||||||
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
|
||||||
//Check that these are correct for your build
|
//Check that these are correct for your build
|
||||||
|
@ -72,60 +89,78 @@ void setup() {
|
||||||
pinMode(A5, INPUT_PULLUP); //yc
|
pinMode(A5, INPUT_PULLUP); //yc
|
||||||
|
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
Joystick[0].begin();
|
Joystick.begin(false);
|
||||||
Joystick[1].begin();
|
|
||||||
Joystick[2].begin();
|
tl_old = throttle_l = analogRead(A0);
|
||||||
|
tr_old = throttle_r = analogRead(A1);
|
||||||
|
pl_old = prop_l = analogRead(A2);
|
||||||
|
pr_old = prop_r = analogRead(A3);
|
||||||
|
ml_old = mix_l = analogRead(A4);
|
||||||
|
mr_old = mix_r = analogRead(A5);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
xa = analogRead(A0);
|
throttle_l = analogRead(A0);
|
||||||
xa_axis = 256*xa/(xamax-xamin+5) - 128 - xamin; //convert raw values -> -128 - 128 (roughly, joystick calibration is still recommended via e.g. Windows joystick interface)
|
throttle_l_axis = 256*throttle_l/(throttle_lmax-throttle_lmin+5) - 128 - throttle_lmin; //convert raw values -> -128 - 128 (roughly, joystick calibration is still recommended via e.g. Windows joystick interface)
|
||||||
|
|
||||||
ya = analogRead(A1);
|
throttle_r = analogRead(A1);
|
||||||
ya_axis = 256*ya/(yamax-yamin+5) - 128 - yamin;
|
throttle_r_axis = 256*throttle_r/(throttle_rmax-throttle_rmin+5) - 128 - throttle_rmin;
|
||||||
|
|
||||||
xb = analogRead(A2);
|
prop_l = analogRead(A2);
|
||||||
xb_axis = 256*xb/(xbmax-xbmin+5) - 128 - xbmin;
|
prop_l_axis = 256*prop_l/(prop_lmax-prop_lmin+5) - 128 - prop_lmin;
|
||||||
|
|
||||||
yb = analogRead(A3);
|
prop_r = analogRead(A3);
|
||||||
yb_axis = 256*yb/(ybmax-ybmin+5) - 128 - ybmin;
|
prop_r_axis = prop_r * rotation_multip - (prop_rmin + 5);
|
||||||
|
//prop_r_axis = 256*prop_r/(prop_rmax-prop_rmin+5) - prop_rmin;
|
||||||
|
|
||||||
xc = analogRead(A4);
|
mix_l = analogRead(A4);
|
||||||
xc_axis = 256*xc/(xcmax-xcmin+5) - 128 - xcmin;
|
mix_l_axis = mix_l * rotation_multip - (mix_lmin + 5);
|
||||||
|
|
||||||
yc = analogRead(A5);
|
mix_r = analogRead(A5);
|
||||||
yc_axis = 256*yc/(ycmax-ycmin+5) - 128 - ycmin;
|
mix_r_axis = 254*(mix_r - mix_rmin)/(mix_rmax - mix_rmin);
|
||||||
|
|
||||||
if(calib==true) { //Serial monitor for calibration
|
if(calib==true) { //Serial monitor for calibration
|
||||||
Serial.println();
|
Serial.println();
|
||||||
Serial.print("xa=");Serial.print(xa);
|
Serial.print("throttle_l=");Serial.print(throttle_l);
|
||||||
Serial.print(" -> ");
|
Serial.print(" -> ");
|
||||||
Serial.print("xa_axis=");Serial.println(xa_axis);
|
Serial.print("throttle_l_axis=");Serial.println(throttle_l_axis);
|
||||||
Serial.print("ya=");Serial.print(ya);
|
Serial.print("throttle_r=");Serial.print(throttle_r);
|
||||||
Serial.print(" -> ");
|
Serial.print(" -> ");
|
||||||
Serial.print("ya_axis=");Serial.println(ya_axis);
|
Serial.print("throttle_r_axis=");Serial.println(throttle_r_axis);
|
||||||
Serial.print("xb=");Serial.print(xb);
|
Serial.print("prop_l=");Serial.print(prop_l);
|
||||||
Serial.print(" -> ");
|
Serial.print(" -> ");
|
||||||
Serial.print("xb_axis=");Serial.println(xb_axis);
|
Serial.print("prop_l_axis=");Serial.println(prop_l_axis);
|
||||||
Serial.print("yb=");Serial.print(yb);
|
Serial.print("prop_r=");Serial.print(prop_r);
|
||||||
Serial.print(" -> ");
|
Serial.print(" -> ");
|
||||||
Serial.print("yb_axis=");Serial.println(yb_axis);
|
Serial.print("prop_r_axis=");Serial.println(prop_r_axis);
|
||||||
Serial.print("xc=");Serial.print(xc);
|
Serial.print("mix_l=");Serial.print(mix_l);
|
||||||
Serial.print(" -> ");
|
Serial.print(" -> ");
|
||||||
Serial.print("xc_axis=");Serial.println(xc_axis);
|
Serial.print("mix_l_axis=");Serial.println(mix_l_axis);
|
||||||
Serial.print("yc=");Serial.print(yc);
|
Serial.print("mix_r=");Serial.print(mix_r);
|
||||||
Serial.print(" -> ");
|
Serial.print(" -> ");
|
||||||
Serial.print("yc_axis=");Serial.println(yc_axis);
|
Serial.print("mix_r_axis=");Serial.println(mix_r_axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Set the axis values using Joystick library
|
//Set the axis values using Joystick library
|
||||||
Joystick[0].setXAxis(xa_axis);
|
Joystick.setXAxis(throttle_l_axis);
|
||||||
Joystick[0].setYAxis(ya_axis);
|
Joystick.setYAxis(throttle_r_axis);
|
||||||
Joystick[1].setXAxis(xb_axis);
|
Joystick.setZAxis(prop_l_axis);
|
||||||
Joystick[1].setYAxis(yb_axis);
|
Joystick.setXAxisRotation(prop_r_axis);
|
||||||
Joystick[2].setXAxis(xc_axis);
|
Joystick.setYAxisRotation(mix_l_axis);
|
||||||
Joystick[2].setYAxis(yc_axis);
|
Joystick.setRudder(mix_r_axis);
|
||||||
|
|
||||||
|
|
||||||
|
if (delta(throttle_l_axis, tl_old)>3 || delta(throttle_r_axis, tr_old)>3 || delta(prop_l_axis, pl_old)>3 || delta(prop_r_axis, pr_old)>3 || delta(mix_l_axis, ml_old)>3 || delta(mix_r_axis, mr_old)>3){
|
||||||
|
tl_old = throttle_l_axis;
|
||||||
|
tr_old = throttle_r_axis;
|
||||||
|
pl_old = prop_l_axis;
|
||||||
|
pr_old = prop_r_axis;
|
||||||
|
ml_old = mix_l_axis;
|
||||||
|
mr_old = mix_r_axis;
|
||||||
|
Joystick.sendState();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delay(20); //this reduces load on the controller
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue