Pages: [1]   Go Down
Author Topic: Bytewert als Buchstabe auf LCD ausgeben  (Read 668 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Jr. Member
**
Karma: 1
Posts: 87
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann ich eine Tastatureingabe (Pc-Tastatur) als Zeichen auf einem LCD ausgeben?
Ich habe bis jetzt dies hier:
Code:
/*
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 smiley-sad
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Germany
Offline Offline
Jr. Member
**
Karma: 1
Posts: 87
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany
Offline Offline
Jr. Member
**
Karma: 1
Posts: 87
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"

« Last Edit: November 29, 2012, 03:32:16 am by Balisto » Logged

Germany
Offline Offline
Edison Member
*
Karma: 48
Posts: 2338
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ein einfaches lcd.write() geht nicht?
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: November 29, 2012, 04:20:52 am by michael_x » Logged

Pages: [1]   Go Up
Jump to: