Tasten von Keypad abfragen Arduino?
Hallo Muss als Projekt eine Art Alarmanlage mit einem Arduino Nano programmieren. Hier wird auf einem Display ein Countdown angezeigt und man muss mittels einen 4x4 keypads einen Code eingeben. Falls der Code richtig ist soll eine LED leuchten. Meine Frage daher: Wie fragt man einen bestimmten Code ab und schaltet danach die LED?
1 Antwort
#include <Keypad.h>
const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 9, 8, 7, 6 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 12, 11, 10 };
// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
#define ledpin 13
void setup()
{
pinMode(ledpin,OUTPUT);
digitalWrite(ledpin, HIGH);
Serial.begin(9600);
}
void loop()
{
char key = kpd.getKey();
if(key) // Check for a valid key.
{
switch (key)
{
case '*':
digitalWrite(ledpin, LOW);
break;
case '#':
digitalWrite(ledpin, HIGH);
break;
default:
Serial.println(key);
}
}
}
Bitte sehr :)
Zum Beispiel so:
#include <Keypad.h>
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] = { 9, 8, 7, 6 };
byte colPins[COLS] = { 12, 11, 10 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
const char *code = "0815";
const int buffer_len = 4;
char buffer[buffer_len];
int buffer_pos = 0;
void setup(){
pinMode(LED_BUILTIN,OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
for(int i = 0; i < buffer_len; ++i) buffer[i] = 0;
}
void loop(){
char key = kpd.getKey();
if(key){
switch(key){
case '*':
for(int i = 0; i < buffer_len; ++i) buffer[i] = 0;
buffer_pos = 0;
break;
case '#':
int ok = 0;
for(int i = 0; i < buffer_len; ++i) ok += (buffer[i] == code[i]) ? 1 : 0;
digitalWrite(ledpin, ok == buffer_len ? HIGH : LOW);
for(int i = 0; i < buffer_len; ++i) buffer[i] = 0;
buffer_pos = 0;
break;
default:
if(buffer_pos < buffer_len)
buffer[buffer_pos++] = key;
break;
}
}
}
Müsstest halt nur noch den Countdown hinzufügen.
Wie if-Anweisungen, switch ... case steuert den Fluss von Programmen, indem Programmierer, um verschiedenen Code, der unter verschiedenen Bedingungen ausgeführt werden soll angeben. Insbesondere eine switch-Anweisung vergleicht den Wert einer Variablen mit den in case-Anweisungen angegebenen Werten. Wenn eine Case-Anweisung gefunden wird, deren Wert mit der der Variablen übereinstimmt, wird die Anweisung in diesem Fall ausgeführt.
Das break-Schlüsselwort beendet die switch-Anweisung und wird typischerweise am Ende eines jeden Falls verwendet. Ohne eine break-Anweisung wird die switch-Anweisung fortfahren, die folgenden Ausdrücke ("falling-through") bis zu einer Pause oder dem Ende der switch-Anweisung auszuführen.
Default steht für die Standardmäßige aktion innerhalb des switch case.
durch break verlässt du das switch case
Danke nochmal funktioniert super. Hätte aber noch eine Frage und zwar wie fragt man jetzt einen mehrstelligen Code ab?