Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

would it be posible to change the char to int to allow more keys? #25

Open
garyocampo opened this issue Nov 16, 2018 · 2 comments
Open

Comments

@garyocampo
Copy link

garyocampo commented Nov 16, 2018

i'm trying to get a 166key matrix working. and chars aren't good enough. changing to int or string however would allow for a bigger matrix.
i've tried modifying the library myself with no success.

@brorgustav
Copy link

Did you try to redefine LIST_MAX? It controls the scanning

@jtornero
Copy link

jtornero commented May 7, 2020

Hello @garyocampo @brorgustav @Chris--A @PaulStoffregen

I do drive a 132 keys keyboard (but using only 121) with this library. AFAIK, I had to modify

MAPSIZE 10 directive to MAPSIZE 12 in keypad.h to make possible to do the scanning properly.

If I can recall, number of columns is limited to 16, so the map size is by default 16x10 keys.
But in the end it depends on your keyboard matrix. In my case, despite the theoretical size of the keys is 16x10=160 keys, my matrix is 12 columns by 11 rows, so the scanning fails. Rising the column number to 12 covers all the keys and the keypad works properly.

There is a limit, however, in how many keys you can drive, and it is limited to Arduino digital i/o pins. I use arduino MEGA so if I call recall a maximum of a 15x15 matrix could be used. Again, it depend on how many REAL digital I/O pins you have in your design, because for instance using ethernet shield some digital pins (51?) can't be used.

And about your suggestion, it would be sure and I beg some real Arduino programmer tackle it!!!
For me, the real nice thing should be to define the matrix with strings instead of chars, so you could code your keyboard better.

But because the library asks for CHAR, arduino accepts the ascii code for the chars, so in fact you have 255 possible keys!!! Take a look to my keyboard matrix:

/* THIS ARRANGEMENT MAKES POSSIBLE USING ETHERNET SHIELD
//BECAUSE PINS 50-53 ARE RESERVED IN ARDUINO MEGA FOR THAT SHIELD*/
char hexaKeys[ROWS][COLS] = {
///*COL ------->  1   2   3   4   5   6   7   8   9  10  11  12*/
///*ROW |  PIN    25  27  29  31  33  35  37  39  41  43  45  47*/
/* 1  |  24*/ {  1,  2,  3,  4,  5,  0,  0,  0,  0,  0,  0,  0},
/* 2  |  26*/ {  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17}, /*OK
/* 3  |  28*/ { 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, /*OK
/* 4  |  30*/ { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41}, /*OK
/* 5  |  32*/ { 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}, /*OK
/* 6  |  34*/ { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,  0}, /*OK
/* 7  |  36*/ {  0, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,  0}, /*OK
/* 8  |  38*/ { 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86}, /*OK
/* 9  |  40*/ { 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98}, /*OK
/* 10 |  42*/ { 99,100,101,102,103,104,105,106,107,108,109,110}, /*OK
/* 11 |  44*/ {111,112,113,114,115,116,117,118,119,120,121,122}}; /*OK*/

byte rowPins[ROWS] = {22,24,26,28,30,32,34,36,38,40,42}; // Row pins connection
byte colPins[COLS] = {23,25,27,29,31,33,35,37,39,41,43,45}; //Column pins connection

String measures[]={
"NIMP","UND","FEM","DEL","FUN","MALE","600","590","580","570","560","550",
"540","530","520","510","500","490","480","470","460","450","440",
"430","420","410","400","390","380","370","360","350","340","330",
"320","310","300","290","280","270","260","250","240","230","220",
"210","200","190","180","170","160","150","140","130","120","110",
"100","90","80","70","60","50","40","30","20","115","105","95",
"85","75","65","55","45","35","25","125","235","225","215","205",
"195","185","175","165","155","145","135","245","355","345","335",
"325","315","305","295","285","275","265","255","365","475","465",
"455","445","435","425","415","405","395","385","375","485","595",
"585","575","565","555","545","535","525","515","505","495"};

What I do next is "recover" the measure string with the index of the pressed key.

Letting the keyboard to return the string directly instead of a char or the integer would be absolutely cool. But that's another story!!!

By the way, what's your keyboard for? I'm so curious!!

All the best

Jorge

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants