Anfänger braucht Hilfe mit Keypad

Hallo zusammen!

Ich brauche Hilfe bei meinem KeyPad. Ich möchte eine dreistellige Zahl in den Arduino eingeben. Dazu habe ich folgenden Code geschrieben.
Der Funktioniert aber nicht, ich bekomme nie die richtige Zahl raus.
Ich hab mir schon die Arraystellen zum Seriellen Monitor ausgeben lassen aber auch im Array scheinen nicht die erwarteten werte zu stehen.
Wer kann mir helfen damit das sauber läuft?
Ich weiß, solche Themen werden bestimmt oft erstellt, ich hab versucht mich einzulesen aber komme nicht wirklich weiter!

Grüße und Danke schonmal!


#include <Keypad.h>
//Hier wird die größe des Keypads definiert
const byte COLS = 4; //4 Spalten
const byte ROWS = 4; //4 Zeilen
//Die Ziffern und Zeichen des Keypads werden eingegeben:
char hexaKeys[ROWS][COLS] = {
  {'D', '#', '0', '*'},
  {'C', '9', '8', '7'},
  {'B', '6', '5', '4'},
  {'A', '3', '2', '1'}
};

byte colPins[COLS] = {2, 3, 4, 5}; //Definition der Pins für die 4 Spalten
byte rowPins[ROWS] = {6, 7, 8, 9}; //Definition der Pins für die 4 Zeilen
char Taste; //Taste ist die Variable für die jeweils gedrückte Taste.
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit "Tastenfeld" angesprochen werden



void setup() {
  Serial.begin(9600);


}

void loop() {
  int wertTaste[3];                          // 3 Stelliges Array
  int gesamt;                                // Variable für die Berechnung
  if (Tastenfeld.getKey() != NO_KEY)

    for (int counter = 0; counter < 3; counter++ )
    {
      wertTaste[counter] = Tastenfeld.getKey() - '0' ;                      // Wert der Tatstatur -48 (ASCII) in die erste Arraystelle schreiben / counter = 0
    }

  gesamt = (wertTaste[0] * 100) + (wertTaste[1] * 10) + (wertTaste[2] * 1);              //...mit den Arraywerten die Zahl errechnen

  Serial.print(wertTaste[0]); Serial.print("erste Stelle");
  delay(400);
  Serial.print(wertTaste[1]); Serial.print("zweite Stelle");
  delay(400);
  Serial.print(wertTaste[2]), Serial.print("dritte Stelle");


}

Wie sieht denn die Ausgabe aus?
Das hilft evtl. schneller, als raten.
Nachtrag:
Ich hab mal meines 4X4 Array 12 16 Tasten Folientastatur Tastatur Taster Modul für Arduino Zubehör | eBay angebaut und den keypad-example benutzt:
Keypad/CustomKeypad.ino at master · Chris--A/Keypad · GitHub

Es kommt natürlich drauf an, wie angeschlossen.

Meine Zuordnung ist: Digital-PIN2 ganz links / Digital-PIN9 ganz rechts.

char hexaKeys[ROWS][COLS] = { {'D','#','0','*'}, {'C','9','8','7'}, {'B','6','5','4'}, {'A','3','2','1'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad

Hallo,
hab hier 2 die fast gleichen Tastaturen hab mich gewundert warum die "spinen"bei umklemmen, ganz einfach bei einer ist die Verdrahtung spiegelverkehrt.

Bernhard

Sobald Du eine Taste drückst, wird deine if-Abfrage wahr, und deine for-Schleife rattert los - schneller als Du den Finger von der Taste nehmen kannst.
Du musst deine 3 Tastendrücke einzeln erkennen und verarbeiten.

Könnte z.B. etwa so aussehen:

#include <Keypad.h>
//Hier wird die größe des Keypads definiert
const byte COLS = 4; //4 Spalten
const byte ROWS = 4; //4 Zeilen
//Die Ziffern und Zeichen des Keypads werden eingegeben:
char hexaKeys[ROWS][COLS] = {
  {'D', '#', '0', '*'},
  {'C', '9', '8', '7'},
  {'B', '6', '5', '4'},
  {'A', '3', '2', '1'}
};

byte colPins[COLS] = {2, 3, 4, 5}; //Definition der Pins für die 4 Spalten
byte rowPins[ROWS] = {6, 7, 8, 9}; //Definition der Pins für die 4 Zeilen
char Taste; //Taste ist die Variable für die jeweils gedrückte Taste.
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit "Tastenfeld" angesprochen werden

int keyCnt ;    // Zahl der Tastendrücke
int gesamt;     // Variable für die Berechnung
char key;       // vom keypad gelesener Wert

void setup() {
  Serial.begin(9600);
}

void loop() {
  key = Tastenfeld.getKey();
  if (key != NO_KEY) {
    // Taste gedrückt:
    Serial.println(key );
    gesamt = gesamt * 10 + key - '0';
    if ( ++keyCnt >= 3 ) {
      // 3 Tastendrücke eingegeben
      Serial.print(" Wert ist "); Serial.println(gesamt);
      gesamt = 0;
      keyCnt = 0;
    }
  }
}

Wobei da noch keine Prüfung drin ist, ob Du auch wirklich Ziffern gedrückt hast.

Also die Zuordnung zu gedruckten Tasten ist falsch.
So verstehe ich das

Es ist einfach die falsche Verwendung der keyPad Lib. Ob die Zuordnung der Tasten richtig ist, ist davon erstmal unabhängig.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.