Кодовый замок доработка скетча

BataniQ
Offline
Зарегистрирован: 05.02.2017

Приветствую всех. Ситуация следующая нашел в инете скетч под кодовый замок с использованием матричной клавиатуры и дисплеем 1602 без I2C. В данном скетче можно изменять пароль только в самом скетче а уж очень хочется изменять пароль при нажатии дополнительной кнопки. Товарищи поделитесь идеями.

вот скетч

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
 
Password password = Password("1234");  // password
int dlugosc = 4;                        // length of the password
 
LiquidCrystal lcd(A0, A1, A5, A4, A3, A2);
 
int ledRed = 11;
int ledGreen = 12;
int buzzer = 13;
int relay = 10;
 
int ilosc; // number of clicks
 
const byte ROWS = 4; // rows
const byte COLS = 3; // cols
 
char keys[ROWS][COLS] =
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
 
byte rowPins[ROWS] = {2,3,4,5};
byte colPins[COLS] = {6,7,8};
 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup()
{
  Serial.begin(9600);
  keypad.addEventListener(keypadEvent);  
  pinMode(ledRed, OUTPUT);  
  pinMode(ledGreen, OUTPUT);
  pinMode(buzzer, OUTPUT);
 
  digitalWrite(ledRed, HIGH);
  digitalWrite(ledGreen, LOW);
 
  lcd.begin(16, 2);
 
  lcd.setCursor(1,0);
  lcd.print("  :Welcom:");
  lcd.setCursor(0,1);
  lcd.print("PLEASE ENTER PIN");
}
 
void loop()
{
  keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
  switch (keypad.getState())
  {
    case PRESSED:
   
int i;
for( i = 1; i <= 1; i++ )
{
  digitalWrite(buzzer, HIGH);  
  delay(50);            
  digitalWrite(buzzer, LOW);  
  delay(50);      
}    
 
Serial.print("Pressed: ");
Serial.println(eKey);
 
switch (eKey)
{
/*
case '#':
break;
 
case '*':
break;
*/
 
default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);
 
if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*_");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("**_");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("***_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("****_");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*****_");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("******_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*******_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}
 
if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}
 
void checkPassword()
{
  if (password.evaluate())
  {
int i;
for( i = 1; i <= 2; i++ )
{
  digitalWrite(buzzer, HIGH);  
  delay(70);            
  digitalWrite(buzzer, LOW);  
  delay(70);      
}    
    ilosc = 0;
 
    Serial.println("Success");    
 
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
 
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" << SUCCESS >>");    
 }  
  else  
  {
int i;
for( i = 1; i <= 1; i++ )
{
  digitalWrite(buzzer, HIGH);  
  delay(200);            
  digitalWrite(buzzer, LOW);  
  delay(200);      
}  
    ilosc = 0;  
    password.reset();
 
    Serial.println("Wrong");
 
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, HIGH);    
             
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("  << WRONG >>");
    delay(2000);
   
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print("  :Welcome:");
    lcd.setCursor(0,1);
    lcd.print("PLEASE ENTER PIN");    
  }
}

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Вы без четырёх дней год на форуме, а код до сих пор правильно вставить не можете. Какой от него смысл тогда?

А по вопросу - какие проблемы? Если нажата специальная кнопка, написать "введите старый пароль", пользователь вводит, если правильно, то пишем "введите новый пароль", пользователь вводит, запоминаете, всё. Ну можно ещё и подтверждение пароля сделать.

Что у вас за класс Password, описанный по-видимому где-то в Password.h, это тоже только вы знаете.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kalapanga пишет:

Вы без четырёх дней год на форуме, а код до сих пор правильно вставить не можете

Он умеет вставлять код (пруф). А раз умеет и не вставляет, значит просто умышленно издевается.

BataniQ
Offline
Зарегистрирован: 05.02.2017

Я не издеваюсь а просто спрашиваю. Я не знаю как добавить данную функцию в код. Поможет кто или закроем тему.

b707
Offline
Зарегистрирован: 26.05.2017

BataniQ пишет:
Я не издеваюсь а просто спрашиваю. Я не знаю как добавить данную функцию в код. Поможет кто или закроем тему.

Вам не о программирование пишут, а про то что код надо правильно вставить!

 

BataniQ
Offline
Зарегистрирован: 05.02.2017

Вот он код вставленый как надо. Только я говорю что код данный я нашел в инете он не мой. Зачем библиотека PASS мне тоже не понятно. Поможите с кодом?

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
 
Password password = Password("1234");  // password
int dlugosc = 4;                        // length of the password
 
LiquidCrystal lcd(A0, A1, A5, A4, A3, A2);
 
int ledRed = 11;
int ledGreen = 12;
int buzzer = 13;
int relay = 10;
 
int ilosc; // number of clicks
 
const byte ROWS = 4; // rows
const byte COLS = 3; // cols
 
char keys[ROWS][COLS] =
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
 
byte rowPins[ROWS] = {2,3,4,5};
byte colPins[COLS] = {6,7,8};
 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup()
{
  Serial.begin(9600);
  keypad.addEventListener(keypadEvent);  
  pinMode(ledRed, OUTPUT);  
  pinMode(ledGreen, OUTPUT);
  pinMode(buzzer, OUTPUT);
 
  digitalWrite(ledRed, HIGH);
  digitalWrite(ledGreen, LOW);
 
  lcd.begin(16, 2);
 
  lcd.setCursor(1,0);
  lcd.print("  :Welcom:");
  lcd.setCursor(0,1);
  lcd.print("PLEASE ENTER PIN");
}
 
void loop()
{
  keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
  switch (keypad.getState())
  {
    case PRESSED:
   
int i;
for( i = 1; i <= 1; i++ )
{
  digitalWrite(buzzer, HIGH);  
  delay(50);            
  digitalWrite(buzzer, LOW);  
  delay(50);      
}    
 
Serial.print("Pressed: ");
Serial.println(eKey);
 
switch (eKey)
{
/*
case '#':
break;
 
case '*':
break;
*/
 
default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);
 
if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*_");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("**_");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("***_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("****_");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*****_");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("******_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*******_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}
 
if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}
 
void checkPassword()
{
  if (password.evaluate())
  {
int i;
for( i = 1; i <= 2; i++ )
{
  digitalWrite(buzzer, HIGH);  
  delay(70);            
  digitalWrite(buzzer, LOW);  
  delay(70);      
}    
    ilosc = 0;
 
    Serial.println("Success");    
 
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
 
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" << SUCCESS >>");    
 }  
  else  
  {
int i;
for( i = 1; i <= 1; i++ )
{
  digitalWrite(buzzer, HIGH);  
  delay(200);            
  digitalWrite(buzzer, LOW);  
  delay(200);      
}  
    ilosc = 0;  
    password.reset();
 
    Serial.println("Wrong");
 
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, HIGH);    
             
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("  << WRONG >>");
    delay(2000);
   
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print("  :Welcome:");
    lcd.setCursor(0,1);
    lcd.print("PLEASE ENTER PIN");    
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В первом посте Вы писали

BataniQ пишет:
Товарищи поделитесь идеями.

А теперь пишете

BataniQ пишет:

Поможите с кодом?

Скажите пожалуйста чётко, что Вам надо - дать идею или "поможить" с кодом? Если второе, что что Вы понимаете под словом "поможите" - дописать его за Вас или ответить на Ваши вопросы (кстати, никаких вопросов от Вас пока не поступало).

Итак, что конкретно Вам нужно?

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Скажите пожалуйста чётко, что Вам надо - дать идею или "поможить" с кодом? Если второе, что что Вы понимаете под словом "поможите" - дописать его за Вас или ответить на Ваши вопросы (кстати, никаких вопросов от Вас пока не поступало).

Итак, что конкретно Вам нужно?

идею человек получил прямо в первом ответе от kalapanga - видимо, идеи мало.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

BataniQ пишет:
Товарищи поделитесь идеями.

BataniQ пишет:

Поможите с кодом?

Итак, что конкретно Вам нужно?

Очевидно, в конце последует просьба поделиться "железом".

BataniQ
Offline
Зарегистрирован: 05.02.2017

Спасибо. Сам разобрался...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

andriano пишет:
Очевидно, в конце последует просьба поделиться "железом".

Дяденьки, помогите написать скетч, а то ардуины нет, аж погулять не на что.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

BataniQ пишет:
Спасибо. Сам разобрался...

Молодец!

А впредь, сначала пробуйте сами, а потом уж постите.