Keypad anschließen

Hallo Freunde des uC,

gerade baue ich ein elektronisches Zahlenschloss und brauche dahingehend beim Anklemmen der Tastatur Hilfe!
Wenn ich diese http://www.conrad.de/ce/de/product/709840/Drucktastenfeld-3-x-4Matrix-3-x-4-Kontakt-Belastung-ca-30-mA-B-x-H-51-mm-x-64-mmTastatur an Pin 1-7 anschließe, funktioniert das Schloss einwandfrei. Da diese aber nicht so stabil ist würde ich gerne die von EAO Secme http://www.conrad.de/ce/de/product/709972/EAO-Secme-Vandalismusgeschuetzte-Tastatur-SOLID-100-Matrix-gelb-beleuchtet-3-x-4-Matrix-Kontakt-Belastung-5-mA5-VMax-2?queryFromSuggest=trueanschließen, wenn ich diese sodann anklemme, funktionieren immer 2 oder 3 Tasten nicht. Ehrlichgesagt ich bin da total überfordert, auch mit der beiliegenden Skizze bekomme ich das nicht hin. Vielleicht weiß jemand von euch Rat!

Sollte der Quellcode interessant sein

#include <Keypad.h>

char* secretCode = "123456";
int position = 0;

const byte rows = 4;
const byte cols = 3;
char keys[rows][cols] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[rows] = {4, 5, 6, 7};
byte colPins[cols] = {1, 2, 3};

Keypad keypad = Keypad(makeKeymap(keys), 
                       rowPins, colPins,
                       rows, cols);

int redPin = 8;
int greenPin = 9;
int relais = 10;

void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(relais, OUTPUT);
  setLocked(true);
}
void loop()
{
  char key = keypad.getKey();
  if (key == '*' || key == '#') {
    position = 0;
    setLocked(true);
  }
  if(key >= '0' && key <= '9')
{
  if (key == secretCode[position]) {
    position++;
  }
  else
  {
     position=0;
  }
  digitalWrite(greenPin, HIGH);
  delay(100);
  digitalWrite(greenPin, LOW);
}
  if (position == 6) {
    setLocked(false);
    delay(2000);
    setLocked(true);
    position = 0;
  }
  delay(50);
}

void setLocked(int locked)
{
  if (locked) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW);
    digitalWrite(relais,LOW);
  }
  else {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
    digitalWrite(relais,HIGH);
  }
}

Datenblatt Seite 9:

X1-3 sind die drei Spalten. Die müssen an Pins 1, 2 und 3
Y1-4 sind die vier Reihen. Die kommen an Pins 4-7

Der Trick dabei ist, dass am Anschluss X und Y durcheinander sind und nicht in Reihe liegen wie es bei der anderen Tastatur der Fall zu sein scheint.

Statt die Kabel umzustecken kannst du natürlich auch die Pins in der Software ändern.

Fr33l4nc3r:
Ehrlichgesagt ich bin da total überfordert, auch mit der beiliegenden Skizze bekomme ich das nicht hin. Vielleicht weiß jemand von euch Rat!

Lege den verwendeten Pin-1 zum Testen der Anschlußbelegung auf einen anderen Pin, dann kannst Du die Serial Schnittstelle zum Debuggen verwenden!

Und dann testest Du erstmal mit einer geeigneten Abfrage-Loop, die Dir die gedrückte Taste auf Serial anzeigt. Ggf. mit ein wenig Herumprobieren: Mal 3 Rows und 4 Colums, mal umgekehrt. Und ggf. die angezeigten Zeichen anders anordnen. Bis die Belegung stimmt.

Und wenn Du in Deiner Schaltung tatsächlich kein Serial benötigst und Pin-1 für das Keypad verwendet werden soll, am Ende den provisorisch umgelegten Pin wieder auf Pin-1 zurücklegen und Serial wieder rausschmeissen.

Das auch. Besser Pins 2-8 nehmen, obwohl das mit der Lücke zwischen Pins 7 und 8 schlecht ist. Aber das ist nicht dein einziges Problem.

Vielen herzlichen Dank, es funktioniert XD
Der Tipp mit X1-3 auf Pin 1-3 und Y1-4 auf Pin 4-7 war die entscheidende Info...

@Serenifly Was meinst du, welches Problem habe ich denn noch???

Sorry, das war blöd formuliert :slight_smile:

Ich meinte damit dass der Fehler darin lag, dass eben die Anschlüsse nicht direkt nebeneinander liegen und man das daher nicht 1:1 auf sequentielle Pins anschließen kann. Was ich oben schon beschrieben habe. Da hätte dir das vertauschen von Spalten und Reihen nichts gebracht, oder den Stecker zu drehen.

Das macht überhaupt nichts weil ich jetzt weiß wie es angeschlossen gehört und ein Stecker wird sowieso nicht angeschlossen, ich löte das Kabel direkt an den Pin des Keypads an damit das auch in 1000 Jahren noch funktioniert! :grin:

Vielen herzlichen Dank, es funktioniert
Der Tipp mit X1-3 auf Pin 1-3 und Y1-4 auf Pin 4-7 war die entscheidende Info...

war die gleiche antwort, die Du hier schon bekommen hast:

http://forum.arduino.cc/index.php?topic=178595.msg1324231#msg1324231