Mehrstellige Zahlen mit 4x3 Keypad

Hallo zusammen,
ich möchte mit dem 4x3 Keypad die Zahl 12# eingeben und damit Pin 24 und 25 HIGH schalten und außerdem auf dem seriellen Monitor "12" anzeigen lassen.
Dies möchte ich mit jeder Zahl von 1-20 machen und # als Enter Taste nutzen.
In meinem Sketch habe ich es mit den Zahlen 12 und 23 versucht. Der serielle Monitor gibt die Zahlen beim Drücken von 1 bzw 2 aus Kann mir dabei jemand weiter helfen?
Viele Grüße

#include <Keypad.h>

const byte ROWS = 4; // Define the number of rows on the keypad
const byte COLS = 3; // Define the number of columns on the keypad
char keys[ROWS][COLS] = { // Matrix defining character to return for each key
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {12, 11, 10, 9}; //connect to the row pins (R0-R3) of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pins (C0-C2) of the keypad
//initialize an instance of class
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  Serial.begin(9600);
}



void loop(){
  
 char key = keypad.getKey();
  
  if ((key == '1') && ('2') && ('#')){     // If key is pressed, send it to the Serial Monitor Window
    Serial.println('1');
    digitalWrite(24, HIGH);
    digitalWrite(25, HIGH);
  }
  if ((key == '2')&& ('2') && ('#')){     // If key is pressed, send it to the Serial Monitor Window
    Serial.println('2');
    digitalWrite(24, HIGH);
    digitalWrite(25, HIGH);
     } }

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Du willst wirklich und ernsthaft einen Pointer auf ein Array mit einem Buchstaben vergleichen?
Das tut ganz sicher nicht das, was du willst.
Der Kompiler sollte dich mit Meldungen überfluten.
Tipp: Schalte sie ein, und auch lesen.

Bitte schnapp dir das nächstgelegene C oder C++ Buch und lasse dir so erklären, was ein Semikolon bewirkt.

Versuch macht klug :nerd_face:

du musst zunächst alle gedrückten Tasten in einer Variable Speichern.
Dann wenn alle gedrückt sind, vergleichst du gegen deine gültigen Codes.

Lies mal hier:

Auch das tut nicht das was du dir wünscht.

Bitte schnapp dir das nächstgelegene C oder C++ Buch und lasse dir so erklären, wie die logischen Operatoren wirken

Das Protokoll ist nicht eindeutig beschrieben.

Hier mal ein Beispiel aus meiner Wühlkiste.
(leicht von Bedienung über Serial zu Keypad umgebaut)

/**
 * 
 *  # entspricht einem Enter
 *  * loescht die bisherige Eingabe
 *  
 *  '0' bis '9' Zahlen
 *  
 *  Eingabe von 1X# schaltet betreffende LED ein
 *  Eingabe von 2X# schaltet betreffende LED aus
 *  Wobei X der Index der betreffenden LED im Array ist
 * 
 *  Ungueltige Eingaben werden abgewiesen
 * 
 */

#include <Keypad.h>

constexpr byte ROWS {4}; // Define the number of rows on the keypad
constexpr byte COLS {3}; // Define the number of columns on the keypad

const char keys[ROWS][COLS] 
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] {12, 11, 10, 9}; 
byte colPins[COLS] {8, 7, 6}; 

Keypad keypad {makeKeymap(keys), rowPins, colPins, ROWS, COLS};


#include <Streaming.h> // die Lib findest du selber ;-)
Print &cout = Serial;  // cout Emulation für "Arme"

unsigned zahlenMerker;

const byte ledPins[] {13,A0,A1,A2,A3}; 

template<typename Array, size_t N> void auswertung(const unsigned zahl,const Array (&pins)[N])
{
  switch(zahl)
  {
    case 10 ... 10+N-1: digitalWrite(pins[zahl-10],HIGH);break; 
    case 20 ... 20+N-1: digitalWrite(pins[zahl-20],LOW); break; 
    default: cout << " Falscher Code "; 
  }
}



void parser(const char key, unsigned &zahl)
{
  cout << "vorher: "     << zahl 
       << " key: "       << key;
  switch(key)
  {
    case '0'...'9': zahl *= 10; zahl += key - '0'; break;
    case '#': auswertung(zahl,ledPins); zahl = 0;  break;
    case '*': zahl = 0; break;
  }
  cout << " nachher: "   << zahl
       << endl;
}


void setup() 
{
  Serial.begin(9600);
  cout << F("Start: ") << F(__FILE__) << endl;
  for(const byte pin:ledPins) pinMode(pin,OUTPUT);
}

void loop() 
{  
  char key = keypad.getKey();
  if(key) parser(key,zahlenMerker);
}

Hallo,
Liese mal das hier durch: "Arduino Playground - Keypad Library".
Jedenfals können deine "if" statements so nicht funktionieren.