// Variables for Stick Values int data_L1_x; //L1 means left stick 1 int data_L1_y; int data_L1_z; int data_L2_x; //L2 means left stick 2 (the little one) int data_L2_y; int data_R_x; //R means right int data_R_y; int data_R_z; int data_SL; //SL means slider int hat_angle; // hat stick (not used atm) int data_per_SL; // percentage value for the slider (used in the display much later) // MUX Sig/Data Pins int SIG_pin_JOY = 14; int SIG_pin_BTN = 15; // Debug flag bool debug_axis = 0l; // Timer variable for triggers unsigned long joystick_timer=0; void setup() { // MUX Pins pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); digitalWrite(0, LOW); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); } void loop(){ // Process the Joystick if(millis() - joystick_timer > 20){ joystick_timer = millis(); get_values_analog_sticks(); set_joystick_axis(); Joystick.send_now(); } } void get_values_analog_sticks(){ for(int i = 0; i < 15; i ++) { switch (i) { case 0: data_L1_x = readMux_JOY(i); break; case 1: data_L1_y = readMux_JOY(i); break; case 2: data_L1_z = map(log_2_lin(readMux_JOY(i)),0,9,0,1023); break; case 3: data_L2_x = readMux_JOY(i); break; case 4: data_L2_y = readMux_JOY(i); break; case 5: data_SL = readMux_JOY(i); break; case 6: data_R_x = readMux_JOY(i); break; case 7: data_R_y = readMux_JOY(i); break; case 8: data_R_z = map(log_2_lin(readMux_JOY(i)),0,9,0,1023); break; } allButtons[i] = readMux_BTN(i); }; void set_joystick_axis(){ Joystick.X(data_R_x); Joystick.Y(data_R_y); Joystick.Z(1023-data_SL); Joystick.Zrotate(data_R_z); Joystick.sliderLeft(data_L1_x); Joystick.sliderRight(data_L1_y); }