MHeironimus / ArduinoJoystickLibrary

An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support.
GNU Lesser General Public License v3.0
2.1k stars 409 forks source link

Leonardo not recognized anymore by windows as joystick #190

Closed jaygrovr closed 3 years ago

jaygrovr commented 3 years ago

Description of Issue

Not sure what I did wrong, but was trying to use multiple joysticks and now windows will never recognize one of my leonardos. In the device manager, it shows an ! next to the device. I was trying to use the boards.txt to name them. Had two boards inside the file. Error on the device manager is

This device cannot start. (Code 10)

The I/O request was canceled.

Technical Details

Sketch File that Reproduces Issue

include "Joystick.h"

include

include

Adafruit_MCP23017 mcp;

Joystick_ Joystick(0x04, JOYSTICK_TYPE_MULTI_AXIS, 20, 0, true, true, true, true, true, false, false, false, false, false, false);

int axis0 = A0; int axis1 = A1; int axis2 = A2; int axis3 = A3; int axis4 = A4; int temp2 = 0; int temp3 = 0; int temp4 = 0;

int state = 0; int horn = 0; bool but1 = 0; bool but2 = 0; bool but3 = 0; bool but4 = 0; bool but5 = 0; bool but6 = 0; bool but7 = 0; bool but8 = 0; bool but9 = 0; bool but10 = 0; bool but11 = 0; bool but12 = 0; bool but13 = 0; bool but14 = 0; bool but15 = 0; bool but16 = 0; bool but17 = 0; bool but18 = 0; bool but19 = 0; bool but20 = 0; bool but21 = 0; bool but22 = 0; bool but23 = 0; bool but24 = 0; bool but25 = 0; bool but26 = 0; bool but27 = 0; bool but28 = 0; bool but29 = 0; bool but30 = 0; bool but31 = 0; bool but32 = 0;

void setup() {

Joystick.setXAxisRange(0, 1023); Joystick.setYAxisRange(0, 1023); Joystick.setZAxisRange(0, 1023);
Joystick.setRxAxisRange(0, 1023);
Joystick.setRyAxisRange(0, 1023); Joystick.setRzAxisRange(0, 1023); Joystick.setBrakeRange(0, 1023);

Joystick.begin(); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP); pinMode(A4, INPUT_PULLUP); pinMode(A5, INPUT_PULLUP); pinMode(A6, INPUT_PULLUP); pinMode(A7, INPUT_PULLUP); pinMode(A8, INPUT_PULLUP); pinMode(A9, INPUT_PULLUP); pinMode(A11, INPUT_PULLUP); pinMode(A10, INPUT_PULLUP);

Serial.begin(38400); mcp.begin(); mcp.pinMode(0, INPUT); mcp.pinMode(1, INPUT); mcp.pinMode(2, INPUT); mcp.pinMode(3, INPUT); mcp.pinMode(4, INPUT); mcp.pinMode(5, INPUT); mcp.pinMode(6, INPUT); mcp.pinMode(7, INPUT);

mcp.pinMode(8, INPUT); mcp.pinMode(9, INPUT); mcp.pinMode(10, INPUT); mcp.pinMode(11, INPUT); mcp.pinMode(12, INPUT); mcp.pinMode(13, INPUT); mcp.pinMode(14, INPUT); mcp.pinMode(15, INPUT);

mcp.pullUp(0, HIGH); mcp.pullUp(1, HIGH);
mcp.pullUp(2, HIGH); mcp.pullUp(3, HIGH); mcp.pullUp(4, HIGH); mcp.pullUp(5, HIGH);
mcp.pullUp(6, HIGH); mcp.pullUp(7, HIGH);

mcp.pullUp(8, HIGH); mcp.pullUp(9, HIGH); mcp.pullUp(10, HIGH);
mcp.pullUp(11, HIGH); mcp.pullUp(12, HIGH); mcp.pullUp(13, HIGH); mcp.pullUp(14, HIGH);
mcp.pullUp(15, HIGH);

}

void loop() {

  axis0 = analogRead(A0);
  axis1 = analogRead(A1);     
  temp2 = analogRead(A2);
  temp3 = analogRead(A3);
  temp4 = analogRead(A4);

 axis2 = map(temp2, 350, 665, 1, 1023);
 axis3 = map(temp3, 360, 670, 1, 1023); 
 axis4 = map(temp4, 295, 720, 1, 1023);           

  Joystick.setXAxis(axis3);
  Joystick.setYAxis(axis2);
  Joystick.setZAxis(axis4);
  Joystick.setRxAxis(axis0);
  Joystick.setRyAxis(axis1);

// Serial.print(axis2); //Serial.print(" "); //Serial.print(axis3); //Serial.print(" "); //Serial.print(axis4);
//Serial.print(" "); //Serial.println(axis0);

but1 = mcp.digitalRead(0); but2 = mcp.digitalRead(1); but3 = mcp.digitalRead(2); but4 = mcp.digitalRead(3); but5 = mcp.digitalRead(4); but6 = mcp.digitalRead(5); but7 = mcp.digitalRead(6); but8 = mcp.digitalRead(7);

but9 = mcp.digitalRead(8); but10 = mcp.digitalRead(9); but11 = mcp.digitalRead(10); but12 = mcp.digitalRead(11); but13 = mcp.digitalRead(12); but14 = mcp.digitalRead(13); but15 = mcp.digitalRead(14); but16 = mcp.digitalRead(15);

but17 = digitalRead(A8); but18 = digitalRead(A9); but19 = digitalRead(A10); but20 = digitalRead(A11);

  Joystick.setButton(0,!but8);
  Joystick.setButton(1,!but7);
  Joystick.setButton(2,!but6);            
  Joystick.setButton(3,!but5);
  Joystick.setButton(4,!but3);
  Joystick.setButton(5,!but4);
  Joystick.setButton(6,!but10);
  Joystick.setButton(7,!but9);

  Joystick.setButton(8,!but2);
  Joystick.setButton(9,!but11);
  Joystick.setButton(10,!but12);            
  Joystick.setButton(11,!but1);
  Joystick.setButton(12,!but14);
  Joystick.setButton(13,!but15);
  Joystick.setButton(14,!but13);
  Joystick.setButton(15,!but16);

  Joystick.setButton(16,!but17);
 Joystick.setButton(17,!but19);
 Joystick.setButton(18,!but18);            
 Joystick.setButton(19,!but20);

// Joystick.setButton(20,!but21); // Joystick.setButton(21,!but22); // Joystick.setButton(22,!but23); // Joystick.setButton(23,!but24);

// Joystick.setButton(24,!but25); // Joystick.setButton(25,!but26); // Joystick.setButton(26,!but27);
// Joystick.setButton(27,!but28); // Joystick.setButton(28,!but29); // Joystick.setButton(29,!but30); // Joystick.setButton(30,!but31); // Joystick.setButton(31,!but32);

delay(40);

}

Wiring Details

nothing strange, here just some pots and the switches are connected to the MCP which was working fine.

Additional context

boards.txt file is copied here

HeavyAuxPanel.name=HeavyEquipmentAuxWing

HeavyAuxPanel.upload.tool=arduino:avrdude HeavyAuxPanel.upload.protocol=avr109 HeavyAuxPanel.upload.maximum_size=28672 HeavyAuxPanel.upload.maximum_data_size=2560 HeavyAuxPanel.upload.speed=57600 HeavyAuxPanel.upload.disable_flushing=true HeavyAuxPanel.upload.use_1200bps_touch=true HeavyAuxPanel.upload.wait_for_upload_port=true HeavyAuxPanel.bootloader.tool=arduino:avrdude HeavyAuxPanel.bootloader.low_fuses=0xff HeavyAuxPanel.bootloader.high_fuses=0xd8 HeavyAuxPanel.bootloader.extended_fuses=0xcb HeavyAuxPanel.bootloader.file=caterina/Caterina-Leonardo.hex HeavyAuxPanel.bootloader.unlock_bits=0x3F HeavyAuxPanel.bootloader.lock_bits=0x2F
HeavyAuxPanel.build.mcu=atmega32u4 HeavyAuxPanel.build.f_cpu=16000000L

HeavyAuxPanel.build.vid=0x2354 HeavyAuxPanel.build.pid=0x8051 HeavyAuxPanel.build.usb_product="Heavy Eq Aux Wing"

HeavyAuxPanel.build.usb_manufacturer="JayG" HeavyAuxPanel.build.board=AVR_LEONARDO HeavyAuxPanel.build.core=arduino:arduino HeavyAuxPanel.build.variant=arduino:leonardo HeavyAuxPanel.build.extra_flags={build.usb_flags}

jaygrovr commented 3 years ago

Even if i switch board back to stock leonardo, it still doesnt show up in windows. I can upload new sketches all day long. It never shows up. I tried changing the vid and pid, as well as the joystick ID in the sketch.. from 0x03 to 0x04, still will not show up. Was just working.

jaygrovr commented 3 years ago

Ok so you cant use the RxAxis, RyAxis without the RzAxis.. I didnt know that.. solved my issue.