Pro Micro 3.3v Analog Pins not working

I ordered a Sparkfun Pro Micro 3.3v (DEV-12587) and got it on 2/11. I’ve been using with the plans to make a gamepad. I got the buttons working flawlessly but when I got to the Joystick, it wouldn’t work. It usually just floats but sometimes it just shows a HIGH input. Yes, I know the board is only 3.3v. I’ve been using a breadboard power module for 5v.

I tested the Analog Pins with multiple Joysticks, Potentiometers, Example Sketches, etc. Nothing. I took the Arduino Joystick Test Example that didn’t work on the Micro and uploaded it to my 2560 Mega with the same Joystick wired the same way. It worked perfectly. Is there something I’m missing or is this board defective?

Micro Joystick Wiring:

https://i.imgur.com/NKa6yfc.jpg

Mega Wiring:

https://i.imgur.com/hjSNY5C.jpg

Micro Serial:

https://i.imgur.com/AV7pPP5.png

Mega Serial:

https://i.imgur.com/MOuSqi8.png

Here is the code I tried on the Mega:

#include <Joystick.h>
#include <AxisJoystick.h>

#define SW_PIN 5
#define VRX_PIN A0
#define VRY_PIN A1

Joystick* joystic;

// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(9600);

  joystic = new AxisJoystick(SW_PIN, VRX_PIN, VRY_PIN);
}

// the loop function runs over and over again forever
void loop() {
  Serial.print("| SingleRead: " + moveTitle(joystic->singleRead()));
  Serial.print(" | MultipleRead: " + moveTitle(joystic->multipleRead()));
  Serial.print(" | Press: " + String(joystic->isPress()));
  Serial.print(" | Up: " + String(joystic->isUp()));
  Serial.print(" | Down: " + String(joystic->isDown()));
  Serial.print(" | Right: " + String(joystic->isRight()));
  Serial.print(" | Left: " + String(joystic->isLeft()));
  Serial.print(" | VRx: " + String(joystic->readVRx()));
  Serial.print(" | VRy: " + String(joystic->readVRy()));
  Serial.println(" | SW: " + String(joystic->readSW()) + " |");

  delay(500); // optionally, only to delay the output of information in the example
}

/**
  Return title of the input joystick move.
*/
String moveTitle(const Joystick::Move move) {
  switch (move) {
    case Joystick::Move::NOT:
      return "NOT";
    case Joystick::Move::PRESS:
      return "PRESS";
    case Joystick::Move::UP:
      return "UP";
    case Joystick::Move::DOWN:
      return "DOWN";
    case Joystick::Move::RIGHT:
      return "RIGHT";
    case Joystick::Move::LEFT:
      return "LEFT";
    default:
      return "???";
  }
}

The power wire on your joystick needs to connect to the VCC pin on the Pro Micro.

I’ve tried that. But the board is the 3.3v version so I had it connected to a breadboard power module at 5v. Same result for both.

Your joystick looks to be a simple analog one, it will run just fine on 3.3 volts.

If you’ve been feeding 5 volts to io pins on a 3.3 volt pro micro it’s likely damaged the pro micro.

Give the VCC pin a try and if it works, you’re off the hook. If not, you will need to replace the pro micro.

The only thing that was connected to 5v was the joystick. And that was only after 3.3v didnt work.

Looking at your data, I’m seeing VRx and VRy changing so the analog pins were working.

You’re going to go from 0 to 1023 very quickly though because the Pro Mini isn’t expecting anything more than 3.3 volts on the analog in pins and you’re feeding a 0 to 5 volt signal. It’s quite possible that you’ve damaged the analog pins on the board, we recommend replacing the Pro Mini and only using 3.3 volts on your joystick.