Page 1 of 1

Code for keypad/relay/pushbutton

Posted: Sun Feb 27, 2022 6:50 am
by blixen66
I am trying to get together code for my ESP32 WROOM to control door opening via a relay and keypad. I have made this work but I want a push button on the inside of the door that opens the door, this button should be toggeling the relay. I also want to be able to use at least 2 different codes, only works with 1 today. I have tried but my knowledge is not enough for this, am a beginner in this world. Anyone that can help me? :roll:

Code: Select all

#include <Keypad.h>
#include <LiquidCrystal_I2C.h>

#define RELAY_PIN   26

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = {27, 14, 12, 13}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 15}; //connect to the column pinouts of the keypad

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

LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows


String password = "1111";
String mypassword;

int redled = 17;
int lock = 16;

int counter = 0; 
int attempts = 0; 
int max_attempts = 3; 

void setup(){
  Serial.begin(9600);
  // set up the LCD's number of columns and rows: 
  lcd.init(); // initialize the lcd
  lcd.backlight();
  //lcd.noBacklight();
  pinMode(RELAY_PIN, OUTPUT); 
  digitalWrite(RELAY_PIN, HIGH); // lock the door
  
  pinMode(redled, OUTPUT);
  pinMode(lock, OUTPUT);
  
  digitalWrite(redled, LOW);
  digitalWrite(lock, LOW);
  
  Serial.println("  PINKOD  +  *  ");
    lcd.print("  PINKOD  +  *  ");
}
  
void loop()
{
  
 keypadfunction();
 
}

void keypadfunction()
{
 char key = keypad.getKey();
  
  if (key){
    Serial.println(key);
    counter = counter + 1; 
    lcd.setCursor(counter, 1);
    lcd.print("*");
  }
  if (key == '1')
  {

    mypassword = mypassword + 1;   
  }
  
    if (key == '2')
  {

    mypassword = mypassword + 2;  
  }
  
  if (key == '3')
  {
 
    mypassword = mypassword + 3; 
  }
  
   if (key == '4')
  {
  
    mypassword = mypassword + 4;  
  }
  
  if (key == '5')
  {
  
    mypassword = mypassword + 5;
  }
  
   if (key == '6')
  {
   
    mypassword = mypassword + 6; 
  }
  
   if (key == '7')
  {

    mypassword = mypassword + 7; 
  }

   if (key == '8')
  {

    mypassword = mypassword + 8; 
  }
  
  if (key == '9')
  {

    mypassword = mypassword + 9;
  }
             
                 if (key == '0')
  {

    mypassword = mypassword + 0; 
  }
  
  
        if (key == '*')
  {
    Serial.println(mypassword); 
    
if ( password == mypassword )
{
lcd.clear(); 
lcd.println("-  Stig - In  -");
lcd.setCursor(0,1);
lcd.println("");
digitalWrite(RELAY_PIN, LOW);

mypassword = ""; 
counter = 0; 
lcd.clear();
lcd.setCursor(0,0); 
lcd.println("  PINKOD  +  *  ");
}
else
{
Serial.println("FEL PINKOD");
digitalWrite(lock, LOW);
attempts = attempts + 1; 
if (attempts >= max_attempts )
{
  lcd.clear();
  lcd.setCursor(0,0); 
  lcd.print("5 min Lockout");
  
digitalWrite(redled, HIGH);
delay(5000); 
digitalWrite(redled, LOW); 
attempts = 0; 

}
mypassword = ""; 
counter = 0; 
lcd.clear(); 
lcd.setCursor(0,0); 
lcd.print("Fel Pinkod");
delay(1000);

lcd.setCursor(0,1); 
lcd.print("Max ggr 3");
delay(1000);

lcd.clear(); 
lcd.println("  PINKOD  +  *  ");
lcd.setCursor(0,1); 
}
    
  }  
  
  
}

Re: Code for keypad/relay/pushbutton

Posted: Mon Feb 28, 2022 1:13 am
by ESP_Sprite
So what your code main loop does, basically is:
- Check if there is a key entered on the keypad.
- If there is a key entered, add it to mypassword
- Check if mypassword is the same as the set password. If so, open the door.

What you want to add/change is:
- Check if mypassword is the same as the set password OR if mypassword is the same as the 2nd password. If so, open the door.
- If the button is pressed, open the door.

Can you see where or how to slot that added behaviour into your code?