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
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());
}
}
}}
}