Possible coding error to use with a matrix (Pro Micro)

Hello!

I’ve followed this guide and made a button box that operates using a matrix.
From a total of 32 buttons, 28 of them work as they should, but the remaining 4 all activate at the same time if any of them is pressed, plus button #1 is also activated.
I’ve searched for any shorted cables or something wrong in the wiring in the whole circuit and didn’t find anything wrong.
It’s all the same as the project in the video, except the type of rotary encoder, which is, maybe ironically, where the problem is happening.
The video uses this encoder, which has 3 pins in one side, for the rotary function, and 2 pins on the other side, for the push button function. The encoder I’m using has 5 pins as well, but they’re all grouped together. After some googling, I used this conversion to discover where to connect each pin.

Thing is, the turn left and turn right function are working as expected, no problem there, each give me a different button code while testing on Windows. However, the pushing the button from any of the 4 encoder makes all of them activate at the same time.
To make it easier, 4 encoders, and they’re supposed to individually activate buttons 21, 22, 23 and 24, one button for each encoder. However, pressing any of them will activate buttons 21, 22, 23, 24 and 1, all at the same time.

I don’t know if I soldered anything wrong, and according to multimeter tests, I did not. All connections go where they’re supposed to go only and they’re not shorted.

So I imagine that either I connected something wrong in the encoders and maybe swapping the SW and + will fix it, but I don’t think that would make sense, or that the code is wrong somewhere. As I didn’t understand said code too well (since I didn’t made it and it’s using parameters I never used before), I’ll leave it down here for someone willing to help me, along with my circuit.
Also, I suppose button 1 is activating too because it’s the first, logically speaking, but for troubleshooting purposes, that button is the right most 2-way toggle, plugged into A3 and 14 (image below).

#include <Keypad.h>
#include <Joystick.h>
 
#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 24
#define NUMROWS 5
#define NUMCOLS 5
 
 
byte buttons[NUMROWS][NUMCOLS] = {
  {0,1,2,3,4},
  {5,6,7,8,9},
  {10,11,12,13,14},
  {15,16,17,18,19},
  {20,21,22,23},
};
 
struct rotariesdef {
  byte pin1;
  byte pin2;
  int ccwchar;
  int cwchar;
  volatile unsigned char state;
};
 
rotariesdef rotaries[NUMROTARIES] {
  {0,1,24,25,0},
  {2,3,26,27,0},
  {4,5,28,29,0},
  {6,7,30,31,0},
};
 
#define DIR_CCW 0x10
#define DIR_CW 0x20
#define R_START 0x0
 
#ifdef HALF_STEP
#define R_CCW_BEGIN 0x1
#define R_CW_BEGIN 0x2
#define R_START_M 0x3
#define R_CW_BEGIN_M 0x4
#define R_CCW_BEGIN_M 0x5
const unsigned char ttable[6][4] = {
  // R_START (00)
  {R_START_M,            R_CW_BEGIN,     R_CCW_BEGIN,  R_START},
  // R_CCW_BEGIN
  {R_START_M | DIR_CCW, R_START,        R_CCW_BEGIN,  R_START},
  // R_CW_BEGIN
  {R_START_M | DIR_CW,  R_CW_BEGIN,     R_START,      R_START},
  // R_START_M (11)
  {R_START_M,            R_CCW_BEGIN_M,  R_CW_BEGIN_M, R_START},
  // R_CW_BEGIN_M
  {R_START_M,            R_START_M,      R_CW_BEGIN_M, R_START | DIR_CW},
  // R_CCW_BEGIN_M
  {R_START_M,            R_CCW_BEGIN_M,  R_START_M,    R_START | DIR_CCW},
};
#else
#define R_CW_FINAL 0x1
#define R_CW_BEGIN 0x2
#define R_CW_NEXT 0x3
#define R_CCW_BEGIN 0x4
#define R_CCW_FINAL 0x5
#define R_CCW_NEXT 0x6
 
const unsigned char ttable[7][4] = {
  // R_START
  {R_START,    R_CW_BEGIN,  R_CCW_BEGIN, R_START},
  // R_CW_FINAL
  {R_CW_NEXT,  R_START,     R_CW_FINAL,  R_START | DIR_CW},
  // R_CW_BEGIN
  {R_CW_NEXT,  R_CW_BEGIN,  R_START,     R_START},
  // R_CW_NEXT
  {R_CW_NEXT,  R_CW_BEGIN,  R_CW_FINAL,  R_START},
  // R_CCW_BEGIN
  {R_CCW_NEXT, R_START,     R_CCW_BEGIN, R_START},
  // R_CCW_FINAL
  {R_CCW_NEXT, R_CCW_FINAL, R_START,     R_START | DIR_CCW},
  // R_CCW_NEXT
  {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
};
#endif
 
byte rowPins[NUMROWS] = {21,20,19,18,15}; 
byte colPins[NUMCOLS] = {14,16,10,9,8}; 
 
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS); 
 
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, 
  JOYSTICK_TYPE_JOYSTICK, 32, 0,
  false, false, false, false, false, false,
  false, false, false, false, false);
 
void setup() {
  Joystick.begin();
  rotary_init();}
 
void loop() { 
 
  CheckAllEncoders();
 
  CheckAllButtons();
 
}
 
void CheckAllButtons(void) {
      if (buttbx.getKeys())
    {
       for (int i=0; i<LIST_MAX; i++)   
        {
           if ( buttbx.key[i].stateChanged )   
            {
            switch (buttbx.key[i].kstate) {  
                    case PRESSED:
                    case HOLD:
                              Joystick.setButton(buttbx.key[i].kchar, 1);
                              break;
                    case RELEASED:
                    case IDLE:
                              Joystick.setButton(buttbx.key[i].kchar, 0);
                              break;
            }
           }   
         }
     }
}
 
 
void rotary_init() {
  for (int i=0;i<NUMROTARIES;i++) {
    pinMode(rotaries[i].pin1, INPUT);
    pinMode(rotaries[i].pin2, INPUT);
    #ifdef ENABLE_PULLUPS
      digitalWrite(rotaries[i].pin1, HIGH);
      digitalWrite(rotaries[i].pin2, HIGH);
    #endif
  }
}
 
 
unsigned char rotary_process(int _i) {
   unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
  rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
  return (rotaries[_i].state & 0x30);
}
 
void CheckAllEncoders(void) {
  for (int i=0;i<NUMROTARIES;i++) {
    unsigned char result = rotary_process(i);
    if (result == DIR_CCW) {
      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
    };
    if (result == DIR_CW) {
      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
    };
  }
}

Circuit

Thanks so much in advance for however helps me!

You will almost certainly get a better response if you follow the advice on posting a coding problem in Read this before posting a programming question and post the code here rather than a link to an external site

UKHeliBob:
You will almost certainly get a better response if you follow the advice on posting a coding problem in Read this before posting a programming question and post the code here rather than a link to an external site

Thanks for the heads up!
I did that and read the post. I believe I described everything required to help solve the problem, but if someone asks me anything about it, I'm more than willing to give any extra information needed!