Trying to get a keyboard matrix to accept an array

Hi all,
Can you help me with this. I'm trying to use a keypad matrix to accept 4 characters into an array and print them out again.

#include "Keypad.h"
const byte ROWS = 4; // four rows
const byte COLS = 4; // three columns
char keys[ROWS][COLS] =
{
{'1','2','3','A' },
{'4','5','6','B' },
{'7','8','9','C' },
{'*','0','#','D' }
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char KEY[4] = {'X','X','X','X'}; // This will become the password array, its elements are set to X originally so i can check if they have changed later



void setup()
{
   Serial.begin(9600);

  int y = 0;
  
   while(y < 4)   //keep looping until the KEY array is full
    {
      KEY[y] = keypad.getKey();
      if(KEY[y] != 'X')           // Check has keypad been pressed 
      {
        Serial.println(KEY[y]);
        y++;
      }
    }

    Serial.println("The entered code is: ");
         
    for(int a=0; a<4; a++)
    {
      Serial.println(KEY[a]);
    }
}

void loop()
{  
}

When i run the program and press the buttons i get 4 blank lines and then the text "The entered code is: "

I've been at this hours!!!!!!

Thanks.

      KEY[y] = keypad.getKey();
      if(KEY[y] != 'X')           // Check has keypad been pressed

After you've overwritten the contents of KEY[ y ], KEY[ y ] is extremely unlikely to now contain 'X'. So, the if statement will always be true. So, it's pointless to even have it there.

It is also pointless to ASSume that getKey() detected a keypress. THAT you need to test.

PaulS:

      KEY[y] = keypad.getKey();

if(KEY[y] != 'X')          // Check has keypad been pressed



After you've overwritten the contents of KEY[ y ], KEY[ y ] is extremely unlikely to now contain 'X'. So, the if statement will always be true. So, it's pointless to even have it there.

It is also pointless to ASSume that getKey() detected a keypress. THAT you need to test.

Will KEY[y] be overwritten even if a button isn't pressed?

Will KEY[y] be overwritten even if a button isn't pressed?

The way you have written your code, it will be.

You need to test that the getKey() function returned a valid value BEFORE you use the value that it returned. A valid value is one that is not equal to NO_KEY.

Thanks, that worked a treat. I wasn't aware of NO_KEY. (sorry for taking so long to get back to you)