Go Down

Topic: Bytewert als Buchstabe auf LCD ausgeben (Read 727 times) previous topic - next topic

Balisto

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

/*
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 :(

michael_x

Quote

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

Balisto

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

michael_x

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


Code: [Select]
byte b= 0x33;
lcd.write(b); // sollte eine '3' anzeigen

uwefed

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 http://arduino.cc/en/Serial/Print
Grüße Uwe

Balisto

#5
Nov 29, 2012, 09:14 am Last Edit: Nov 29, 2012, 09:32 am by Balisto Reason: 1
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"


sth77

Ein einfaches lcd.write() geht nicht?
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

michael_x

#7
Nov 29, 2012, 09:53 am Last Edit: Nov 29, 2012, 10:20 am by michael_x Reason: 1
Quote
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.

Go Up