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");
}
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.
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.