Bytewert als Buchstabe auf LCD ausgeben

Wie kann ich eine Tastatureingabe (Pc-Tastatur) als Zeichen auf einem LCD ausgeben?
Ich habe bis jetzt dies hier:

/*
PS/2 Keyboard Input
*/
#include <LiquidCrystal.h>
#define LED 13
#define CLK 7
#define DAT 6

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// if I put the keyboard map in here then keys[scan code] would return 
// the ascii value of the scan code.
unsigned char keys[128] =
{
};

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(CLK, INPUT);
  pinMode(DAT, INPUT);
  digitalWrite(CLK, HIGH);
  digitalWrite(DAT, HIGH);
  delayMicroseconds(50);
  Serial.begin(9600);
  lcd.display();
  lcd.begin(16, 2);
}

void loop()
{
  byte b = readkey(); 
  if (b == 0xF0)
  {
    // key released
    b = readkey();
  }
  else
  {
//    Serial.print(b, HEX);
    lcd.print(b,HEX);
    Serial.print(" ");
  }
}

byte readkey()
{
  byte _start = 0;
  byte buf = 0;
  byte _parity = 0;
  byte _stop = 0;
  
  waitClockLow();
    
  _start = digitalRead(DAT);

  if (_start == 0)
  {
    waitClockLow();
    for (byte c=0; c<8; c++)
    {
      buf = buf | (digitalRead(DAT) << c);
      waitClockLow();
    }
  
    _parity = digitalRead(DAT);
    waitClockLow();
  
    _stop = digitalRead(DAT);
  }
  return buf;
}

void waitClockLow()
{
  if (digitalRead(CLK) == LOW)
    while (digitalRead(CLK) == LOW)
    {
    }
  while (digitalRead(CLK) == HIGH)
  {
  }
}

Da wird mir der Tastendruck als HEX ausgegeben.
Versuche mit sprintf haben mich auch nicht weitergebracht :frowning:

lcd.print(b,HEX);
Da wird mir der Tastendruck als HEX ausgegeben.

Wenn das z.B. für ein A die 41 ist, was passiert dann bei

  lcd.write(b);

???

ich kann die jetzt nicht den genauen wert nennen aber es kommt eine zahl wie etwa 33

ich kann die jetzt nicht den genauen wert nennen aber es kommt eine zahl wie etwa 33

byte b= 0x33;
lcd.write(b); // sollte eine '3' anzeigen

Wenn Du
lcd.print(b,HEX);
schreibst wird der Wert der Variablen als Hex-Zahl ausgegeben.
Die Lösung ist
lcd.print(b);
Mehr unter Serial.print() - Arduino Reference
Grüße Uwe

Das funktioniert nun.

Aber noch eine andere Frage:
Angenommen ich habe im Programm die INT Zahl 65 und möchte nun den dazugehörigen Ascii Buchstaben (A) ausgeben lassen.
INT a = 65;

Wie mache ich das?

Ich kenne das aus anderen Programmiersprachen mit:
S : String;
A: Integer;
A = 65;
S = chr(65);

fertig. So hat dann Variable S das Zeichen "A"

Ein einfaches lcd.write() geht nicht?

Ich kenne das aus anderen Programmiersprachen

Vergiss Basic und Strings.

char b = 65; // das ist der Buchstabe 'A'
char s[] = {65,0}; // das ist der string "A", hat aber nicht viel (eher nichts) mit Strings zu tun, wie du sie kennst, und das ist gut so.

Gut, weil du an jeden Buchstaben des strings (= char array) direkt drankommst, wohingegen String-Objekte nicht veränderbar sind, bei jeder Änderung wird ein neues Objekt erzeugt, und die Müllabfuhr auf dem Arduino taugt nichts.