Read a character string from I2C keyboard

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