Problema con teclado 4x4 Arduino nano

Hola buenas, espero que me puedan ayudar
estoy haciendo un proyecto con una teclado matricial 4x4 y unos servos motores en un Arduino nano
de momento estoy integrando que al presionar alguna tecla me arroje por monitor serial dicha tecla

en primera instancia, el teclado me funcionaba bien, usaba los las entradas digitales 4,5,6,7,8,9,10,11
pero para los servos necesito las PWM que están el los 9,10 y 11
así que, modifique el código para usar los 4,5,6,7,8,12,13,14 en el teclado.

el problema es que ahora, al presionar cualquier botón de la columna 3,6,9,#
me marca toda la fila,
ejemplo, presiono el 6 y me arroja 4 5 6 B

los demás botones me funciona perfecto
image

probé con dos teclados distintos, para descartar y el problema persiste.

no se si tenga algo que ver pero, la columna que me genera el problema seria la que esta conectada al pin D13, y entiendo que, el pin D13 también se usa como SCK en la comunicación PSI
yo no estoy usando comunicación PSI, ni la quiero usar, pero... ¿será posible que ese reloj este habilitado y por eso me crea alguna interferencia? me perecería raro pero no me puedo imaginar alguna otra cosa,
ojala me puedan ayudar.


#include <Arduino.h>
#include "ButtonMatrix.h" 
using namespace RSys;

static const uint32_t c_uiMonitorBaud = 9600; // USB monitoring baud rate

const uint8_t COLS = 4; 
const uint8_t ROWS = 4;

uint8_t colPins[COLS] = {8,12,13,14}; /** Button matrix column pins */
uint8_t rowPins[ROWS] = {4,5,6,7}; /** Button matrix row pins */

/** Button matrix button definitons */
RSys::Button buttons[ROWS][COLS] = {
     { (1), (2), (3),('A') },
    { (4), (5), (6),('B') },
    { (7), (8), (9),('C') },
    { ('*'), (0), ('#'),('D') }
};

ButtonMatrix matrix((Button*)buttons, rowPins, colPins, ROWS, COLS);

int periodo = 500;
unsigned long TiempoAhora = 0;


void setup()
{
    Serial.begin(c_uiMonitorBaud);
    
    matrix.init();  /** Initialize the ButtonMatrix*/
}

void loop()
{
    Button* pButton = NULL;

    // Get the number of buttons in the matrix
    const uint16_t numButtons = matrix.getNumButtons();

   
    if (matrix.update())
    {  
        // There was a change in any of the buttons  
        // Scan all buttons, except the last one
        if (millis()>TiempoAhora+periodo)
        {
          TiempoAhora = millis();
        for (uint16_t idx = 0; idx < numButtons; idx++)
        {        
            pButton = matrix.getButton(idx);    
            if (pButton->isPressed())
            {
              tone(15,40,30);
                // Button is pressed
               Serial.print("Button pressed: ");Serial.println(pButton->getNumber());

            }             
        }
        }}

}

El problema te lo debe estar generando el LED "L" conectado al pin 13.
No olvides que los pines analógicos A0 a A5 puedes usarlos también como pines digitales.
Ahí tienes 6 pines disponibles.

Era el led "L"
lo desoldé de la placa y todo funciono correctamente
muchísimas gracias

no podía usar otro pin porque ya había mandado a fabricar la PCB
y de todas formas loe quería usar para otra cosa, :sweat_smile: