How do I integrate the keypad-PIN request into my arduino program?

16 Views Asked by At

I have a problem with my arduino c++ code: The goal is to open a lock with a servo via PIN-code on the keypad. All the non-essential functions work (LCD Display integration, servo connection etc.) What doesn't work is the entering of the PIN-Code itself. I can lock the servo, but whatever PIN-code I type, the program goes into Alarm-Mode. It should open the lock after the PIN-Code is entered correct. Hardware works correctly, connections seem to be right.

#include <Keypad.h>
#include <Servo.h>
#include <LiquidCrystal.h>
char P1='1';char P2='2';char P3='3';char P4='4'; 
char C1, C2, C3, C4;

Servo servoblau;
int roteLED = 12;
int grueneLED = 13;
const byte COLS = 4;
const byte ROWS = 4;
int z1=0, z2, z3, z4;
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};
byte rowPins[ROWS] = {6,7,8,9};
char Taste;
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);

void setup() 
{
  Serial.begin(9600);
  pinMode(roteLED, OUTPUT);
  pinMode(grueneLED, OUTPUT);
  pinMode (A0, OUTPUT);
  servoblau.attach(11);
  lcd.begin(16,2);

  }


void loop() 
{
  Anfang:
  Taste = Tastenfeld.getKey();
  if (Taste)
  {
  if (Taste=='#')
  {
    lcd.clear ();
    lcd.setCursor(0,0);
    lcd.print("Befehl: #");
    lcd.setCursor(0,1);
    lcd.print("Schloss zu");

    servoblau.write(90);
    digitalWrite(roteLED,HIGH);
    digitalWrite(grueneLED,LOW);
    z1=0; z2=1; z3=1; z4=1;
    goto Anfang;
  }
  }

if(Taste=='*')
{
  if(C1==P1&&C2==P2&&C3==P3&&C4==P4)
  {
    lcd.clear ();
    lcd.setCursor(0,0);
    lcd.print("Code richtig");
    lcd.setCursor(0,1);
    lcd.print("Schloss auf");

    servoblau.write(0);
    digitalWrite(roteLED,LOW);
    digitalWrite(grueneLED,HIGH);
  }
  else
  {
    lcd.clear ();
    lcd.setCursor(0,0);
    lcd.print("Code falsch");
    lcd.setCursor(0,1);
    lcd.print("ALARM!");
    digitalWrite(roteLED,HIGH);
    digitalWrite(grueneLED,LOW);

    delay (3000);

    
z1=0; z2=1; z3=1; z4=1; // Der Zugang für die erste Zeicheneingabe wird wieder freigeschaltet
   goto Anfang; //An dieser Stelle springt der Sketch zur Eingabe der Taste zurück, damit das Zeichen "#" nicht im folgenden Abschlitt als Codeeingabe gewertet wird.
   }
  }
// Ab hier werden die vier Code-positionen unter den Variablen C1 bis C4 abgespeichert. Damit die eingegebenen Zeichen auch an der richtigen Position des Passwortes gespeichert werden, wird mit den Variablen z1 bis z4 der Zugang zu den einzelnen Positinen freigegeben oder gesperrt.
  if (z1==0) // Wenn das erste Zeichen noch nicht gespeichert wurde...
  {
  C1=Taste; //Unter der Variablen "C1" wird nun die aktuell gedrückte Taste gespeichert
  Serial.print("Die Taste "); //Teile uns am Serial Monitor die gedrückte Taste mit
  Serial.print(C1);
  Serial.println(" wurde gedrueckt");
  z1=1; z2=0; z3=1; z4=1; // Zugang zur zweiten Zeicheneingabe freischalten
  goto Anfang;
  }
 
  if (z2==0) // Wenn das zweite Zeichen noch nicht gespeichert wurde...
  {
  C2=Taste; //Unter der Variablen "C2" wird nun die aktuell gedrückte Taste gespeichert
  Serial.print("Die Taste "); //Teile uns am Serial Monitor die gedrückte Taste mit
  Serial.print(C2);
  Serial.println(" wurde gedrueckt");
  z1=1; z2=1; z3=0; z4=1; // Zugang zur dritten Zeicheneingabe freischalten
  goto Anfang;
  }

  if (z3==0) // Wenn das dritte Zeichen noch nicht gespeichert wurde...
  {
  C3=Taste; //Unter der Variablen "C3" wird nun die aktuell gedrückte Taste gespeichert
  Serial.print("Die Taste "); //Teile uns am Serial Monitor die gedrückte Taste mit
  Serial.print(C3);
  Serial.println(" wurde gedrueckt");
  z1=1; z2=1; z3=1; z4=0; // Zugang zur vierten Zeicheneingabe freischalten
  goto Anfang;
  }
  
  if (z4==0) // Wenn das vierte Zeichen noch nicht gespeichert wurde...
  {
  C4=Taste; //Unter der Variablen "C4" wird nun die aktuell gedrückte Taste gespeichert
  Serial.print("Die Taste "); //Teile uns am Serial Monitor die gedrückte Taste mit
  Serial.print(C4);
  Serial.println(" wurde gedrueckt");
  z1=1; z2=1; z3=1; z4=1; // Zugang zur weiteren Zeicheneingabe sperren
  }
 }

I tried to integrate the PIN-Checking Part into my code. The program works and has no bugs, but the part with the PIN-entering doesn't work.

0

There are 0 best solutions below