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


von Frank H. (maxmeise)


Angehängte Dateien:

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
1
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

von Peter D. (peda)


Lesenswert?

Die Zuordnung des Scancode zu dem gewünschten Keycode macht man am 
besten über eine Tabelle:
1
u8 KEY_TAB[12] = { 1, 5, 12, 255, 17, 32, '5', '8' }; // wie man will
2
3
u8 get_key_code( u8 scan_code )
4
{
5
  return KEY_TAB[scan_code];
6
}


Peter

von Peter D. (peda)


Lesenswert?

Max Meise wrote:

>
1
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:
1
row = col;


Peter

von Frank H. (maxmeise)


Lesenswert?

Danke Peter,

werde es so machen wie von dir vorgeschlagen.

best regards,

MaxMeise

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.