www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem beim auslesen einer 4x3 Matrixtastatur


Autor: Frank H. (maxmeise)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hoffe einer von euch kann mir bei meinem Problem beim
Auslesen der Matrix helfen. Ich habe eine Routine von
Peter Dannegger für eine 4x4 gefunden, diese leicht geändert.
Funktionierte gleich, ich bekam auch einen keycode zwischen 1-12,
leider nicht den Richtigen ( z.B. eine 12 für eine gedrückte 1 ).

Schnell die Werte für col und row in den Abfragen geändert, so das z.B
für eine "9" ein 2(col) + 7(row) zurückgegeben wird, also
return col + row;

Einige Tasten funktioneren stabil, andere nicht, eine gedrückte 12 gibt
eine 12 zurück, eine 9 beim erstmaligen Drücken eine 14, dann eine 9.

Benutze ich Peters  " return col - row ", habe ich immer einen falschen
( na klar ), aber immer den gleiche Wert bei drücken der gleichen Taste.

return col + row -> Keinen stabilen Rückgabewert bei gleicher
                    Taste, machmal o.k.
return col - row -> Immer falsch, aber immer gleich falsch ;-)

Ich habe verschiedene Datentypen ausprobiert, brachte nichts, aber
eine simple addition sollte doch mit einem unsigned char möglich sein.

Hoffe ich konnte meine Problem deutlich machen,

best regards,

MaxMeise

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Zuordnung des Scancode zu dem gewünschten Keycode macht man am 
besten über eine Tabelle:

u8 KEY_TAB[12] = { 1, 5, 12, 255, 17, 32, '5', '8' }; // wie man will

u8 get_key_code( u8 scan_code )
{
  return KEY_TAB[scan_code];
}


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Max Meise wrote:

>
return col + row;

Es hat schon seinen Grund, warum ich die Differenz genommen habe.

Das Testen von Reihe und Spalte erfolgt ja nacheinander und das Drücken 
völlig zufällig.
Daher kann es sein, daß nur eines erkannt wurde und das wird durch die 
Differenz abgefangen, weil ja davor steht:
row = col;


Peter

Autor: Frank H. (maxmeise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Peter,

werde es so machen wie von dir vorgeschlagen.

best regards,

MaxMeise

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.