4x4 Tastenfeld

Guten morgen alle zusammen.

Ich habe da mal wieder eine Frage.
Und zwar habe ich mir für meinen Arduino folgendes Tastenfeld gekauft :

4x4 Tastenfeld

Leider finde ich im Netz keine Anleitung, wie ich das ding nun mit meinem Arduino verbinden kann.
Ich würde es gerne an meinen Arduino Micro anschließen. So wie ich gelesen habe, schaut der Arduino welche Reihe mit welcher Zeile gedrückt wurde und erkennt somit welcher Taster gedrückt wurde.

Muss ich bei dem Tastenfeld noch Wiederstände anbauen, oder kann ich das Teil direkt per Kabel am Arduino anschließen ?

Gruß

Roland

Das ist ein Matrix-Tastenfeld.
Schau mal hier: Arduino Playground - KeypadTutorial

Widerstände sind nicht nötig.

Danke dir für die Antwort.

Nur leider bin ich noch nicht so ganz schlauer. Mich macht halt dieses Video hier etwas verwirrt :

Video Matrix Tastenfeld

Dort wurden Wiederstände benutzt. Leider ist alles nur auf Englisch. Ich verstehe es zwar etwas, aber halt nur etwas :slight_smile:

Wenn ich mir dein Link anschaue, denke ich , ich brauche pro taste ein digitalen Pin der überwacht, ob Strom fließt oder nicht.

Bei dem Video kann ich mir vorstellen, dass die Tasten an einem Analogen Pin angeschlossen sind. Durch die Wiederstände ( die ja immer verschieden sind ) wird halt am Analogen Pin gemessen, was für ein Wiederstand benutz wird. Anhand des gemessenen Wiederstand wird eine Zahl ausgegeben.

Liege ich da richtig, oder habe ich alles falsch verstanden ?

Gruß

Roland

Sir_Roland:
Liege ich da richtig, oder habe ich alles falsch verstanden ?

Stimmt! Um digitale Pins zu sparen, kann man auch ein Widerstandsarray nutzen. Ist die "more elegant" aber auch für den Anfang schwierigere Variante.

Normal benötigst du für eine 4 x 4 Tastatur 8 digitale Pin's zum auslesen. In dem Video nutzen sie mehrere Spannungsteiler und benötigen daher nur einen analoge Pin

Dann bin ich ja nicht ganz so dumm :slight_smile:

Aber so 100 % habe ich immer noch nicht verstanden.
Ich möchte mein 4x4 Tastenfeld für den Anfang erstmal mit den Digitalen Pins verwenden, da meine Widerstände noch in Containern liegen und erst in ca. 2 Wochen kommen ;D

Jetzt habe ich ja die acht Pins am Tastenfeld aber 16 Tasten.
Ich stelle mir das Tastenfeld so vor, als habe ich 16 einzelne Taster. Bei einem Taster muss ich ja GND, VCC und einen Digitalen Pin verbinden. Also habe ich pro Taster 3 Pins.

Beim Tastenfeld hatte ich mir das so gedacht, dass ich zumindest 1 x GND , 1 x VC und für jede Taste einen Pin hätte ( also 16 Pins ). Das würden also dann 18 Pins sein. Wieso kommt das Feld dann mit 8 Pins aus ????

Sir_Roland:
Dann bin ich ja nicht ganz so dumm :slight_smile:

Aber so 100 % habe ich immer noch nicht verstanden.
Ich möchte mein 4x4 Tastenfeld für den Anfang erstmal mit den Digitalen Pins verwenden, da meine Widerstände noch in Containern liegen und erst in ca. 2 Wochen kommen ;D

Jetzt habe ich ja die acht Pins am Tastenfeld aber 16 Tasten.
Ich stelle mir das Tastenfeld so vor, als habe ich 16 einzelne Taster. Bei einem Taster muss ich ja GND, VCC und einen Digitalen Pin verbinden. Also habe ich pro Taster 3 Pins.

Beim Tastenfeld hatte ich mir das so gedacht, dass ich zumindest 1 x GND , 1 x VC und für jede Taste einen Pin hätte ( also 16 Pins ). Das würden also dann 18 Pins sein. Wieso kommt das Feld dann mit 8 Pins aus ????

Weil es eine Matrix ist.
Siehe dir den Link von uxomm nochmal an.

Also muss ich erst mit einem Multimeter ( was ich mir dann erst noch besorgen muss ) die Pins messen.
Wie sieht es denn nun mit GND und VCC aus ??? Das finde ich in dem Link leider nicht :frowning:

Sir_Roland:
Also muss ich erst mit einem Multimeter ( was ich mir dann erst noch besorgen muss ) die Pins messen.
Wie sieht es denn nun mit GND und VCC aus ??? Das finde ich in dem Link leider nicht :frowning:

Einen Spannungsanschluss brauchst du an dem Tastenfeld nicht.
Da werden einfach nur Ports des Arduino verbunden und das per Sketch ausgewertet.

Die Pins werden direkt angeschlossen. Du musst es aber in der richtigen Reihenfolge tun und dann das Matrix/Keypad Objekt entsprechend initialisieren

Es ist aber ok wenn das erst mal nicht passt. Dann stimmt einfach die Zuordnung der Zahlen nicht. In dem Fall kann man dann z.B. die Reihenfolge der Pins herumdrehen (entweder in Hardware oder Software) bis es passt.

ROWz , die Zeilen, liegen mittels internem Pullup-Widerstand auf HIGH. Das Prinzip ist, daß auf COLs, also die Spalten, nacheinender ein LOW gegeben wird. Dabei werden die ROWz-Eingänge gelesen. Ist keine Taste gedrückt, werden alle Eingänge als HIGH gelesen. Ist ein Taster gedrückt, wird in einer Zeile ein LOW festgestellt. Über die Kombination von auf LOW geschalteter Zeile und LOW gelesener Spalte kann die gedrückte Taste ermittelt werden.

Die Bibliothek ist nur für drei Spalten standardmäßig eingerichtet, das mußt Du erweitern:

const byte ROWS = 4; // vier Reihen
const byte COLS = 4; // vier Spalten
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'#','0','*','D'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 5, 4, 3, 2 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 9, 8, 7, 6 };

Ich vermute, die oberen vier Pins sind die Spalten, die unteren die Zeilen.

Vielen dank für eure Hilfe. Ich werde es am Wochenende versuchen.
Werde dann natürlich berichten. Danke nochmal :slight_smile:

Sir_Roland:
Dort wurden Wiederstände benutzt. Leider ist alles nur auf Englisch. Ich verstehe es zwar etwas, aber halt nur etwas :slight_smile:

Wenn ich mir dein Link anschaue, denke ich , ich brauche pro taste ein digitalen Pin der überwacht, ob Strom fließt oder nicht.

Es gibt auch deutsche Anleitungen: folientastatur-membran-keypad-mit-arduino-benutzen

Auch bei der einfachen Variante sollte man Widerstände benutzen.
Durch gleichzeitigen Druck auf 2 Tasten kann man zwei der Outputleitungen kurzschliessen.
Wenn dann eine von den beiden gerade zum scannen benutzt wird, also high ist, und die andere
low dann kann es den Ausgang zerlegen.

Ulli

beeblebrox:
Auch bei der einfachen Variante sollte man Widerstände benutzen.
Durch gleichzeitigen Druck auf 2 Tasten kann man zwei der Outputleitungen kurzschliessen.
Wenn dann eine von den beiden gerade zum scannen benutzt wird, also high ist, und die andere
low dann kann es den Ausgang zerlegen.

Ulli

Wenn Pullup/Pulldown bzw die internen Pullupwiderstände verwendet ist es egal ob 1, 2 oder alle Tasten gedrückt werden. Es geht nichts kaput. Bei der Schaltung ohne Dioden in serie zu den Tastern kann aber nur 1 Taste zweifelsfrei erkannt werden. Bei mehr gedrückten Tasten ist eine Erkennung der gedrückten Taste nicht mehr möglich.

Wenn die Schaltung falsch ist und keine der obengenannten Widerstände verwendet werden funktioniert das ganze nicht / bzw geht das ganze kaput bereits beim betätigen 1 Tasters.

Grüße Uwe

Hallo,

ich rede ja auch nicht von der Verbindung zu den Inputs.

Vier Tasten liegen jeweil auf einem Input (als Beispiel eine Reihe).

Jetzt werden die Spalten durchgescannt, d.h. ein Spaltenpin wird auf logisch High gezogen (OUTPUT).
Die Nachbarspalten sind LOW (OUTPUT). Jetzt drückt man die zwei benachbarteTasten (gleichzeitig) jeweils
in der seben Spalte und verbindet damit eine HIGH gesetzte Spalte mit einer auf low gesetzten -> ...
Oder meinst du man schaltet die Spalten gar nicht als Output sondern als Input mit
Pullup nach high ? Klar dann wäre da kein Problem.

Ich habe sowas mal mit 2 Portexpandern (PCF....) gemacht, da existierte das Problem nicht
weil die auf Output nur 20µA liefern konnten. Da geht nix kaputt.

Ulli

In der Keypad.cpp werden die Reihen auf INPUT_PULLUP, dann die Spalten einzeln auf OUTPUT gesetzt, dann LOW, dann ausgewertet, dann HIGH, dann wieder auf INPUT. Da wurde die beschriebene Problematik berücksichtigt. Kann man von lernen, wenn man es selbst machen möchte.

Bei mehr gedrückten Tasten ist eine Erkennung der gedrückten Taste nicht mehr möglich.

Man kann aber "Fehlbedienungen" erkennen, und dem entsprechend ignorieren.

Und noch ein paar Dioden rein, dann kann man Mehrfachbedienungen schon fast auswerten.

Wenn dann eine von den beiden gerade zum scannen benutzt wird, also high ist, und die andere
low dann kann es den Ausgang zerlegen.

Auch dieses Problem lässt sich geschickt umschiffen, wenn man intensiv mit den DDR, PIN und PORT Registern spielt. Also alles auf INPUT_PULLUP stellt und immer nur 1 Leitung auf GND zieht.

combie:
Auch dieses Problem lässt sich geschickt umschiffen, wenn man intensiv mit den DDR, PIN und PORT Registern spielt.

Es schadet nicht, aber ist nach meiner Einschätzung nicht notwendig. Mit digitalWrite() und digitalRead() geht es auch.

combie:
Also alles auf INPUT_PULLUP stellt und immer nur 1 Leitung auf GND zieht.

Das ist das springende Komma! Siehe #16.

Das ist das springende Komma! Siehe #16.

@agmue
Doppelt hält besser!

@Sir_Roland
Betrachte es als Arbeitsanweisung!
So kommst du ohne Zusatzbauteile aus.
Einfach nur: Arduino und Tastermatrix (ok, plus ein paar Drähtchen dazwischen)