The requestFrom(slaveAddress, 4) method always reads number of bytes (4) requested at default 100 kbit/sec. Entry from the Keyboard is not that much fast; so the Serial Monitor will show validFirstCharater and FFs or anyValue for the last three characters.
Try sketch of post #5 @J-M-L.
After the above, try the following one:
#define CARDKB_ADDR 0x5F //Define the I2C address of CardKB.
#include <Wire.h>
char myData[5] = {0};
int i = 0;
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
while (Wire.requestFrom(CARDKB_ADDR, 1) == 0)
{
; //wait
}
myData[i] = Wire.read();
i++;
if (i == 4)
{
myData[i] = '\0';
i = 0;
Serial.println(myData);
}
}