Кодовый замок доработка скетча
- Войдите на сайт для отправки комментариев
Чт, 01/02/2018 - 13:59
Приветствую всех. Ситуация следующая нашел в инете скетч под кодовый замок с использованием матричной клавиатуры и дисплеем 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");
}
}
Вы без четырёх дней год на форуме, а код до сих пор правильно вставить не можете. Какой от него смысл тогда?
А по вопросу - какие проблемы? Если нажата специальная кнопка, написать "введите старый пароль", пользователь вводит, если правильно, то пишем "введите новый пароль", пользователь вводит, запоминаете, всё. Ну можно ещё и подтверждение пароля сделать.
Что у вас за класс Password, описанный по-видимому где-то в Password.h, это тоже только вы знаете.
Вы без четырёх дней год на форуме, а код до сих пор правильно вставить не можете
Он умеет вставлять код (пруф). А раз умеет и не вставляет, значит просто умышленно издевается.
Я не издеваюсь а просто спрашиваю. Я не знаю как добавить данную функцию в код. Поможет кто или закроем тему.
Вам не о программирование пишут, а про то что код надо правильно вставить!
Вот он код вставленый как надо. Только я говорю что код данный я нашел в инете он не мой. Зачем библиотека 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"); } }В первом посте Вы писали
А теперь пишете
Поможите с кодом?
Скажите пожалуйста чётко, что Вам надо - дать идею или "поможить" с кодом? Если второе, что что Вы понимаете под словом "поможите" - дописать его за Вас или ответить на Ваши вопросы (кстати, никаких вопросов от Вас пока не поступало).
Итак, что конкретно Вам нужно?
Скажите пожалуйста чётко, что Вам надо - дать идею или "поможить" с кодом? Если второе, что что Вы понимаете под словом "поможите" - дописать его за Вас или ответить на Ваши вопросы (кстати, никаких вопросов от Вас пока не поступало).
Итак, что конкретно Вам нужно?
идею человек получил прямо в первом ответе от kalapanga - видимо, идеи мало.
Поможите с кодом?
Итак, что конкретно Вам нужно?
Очевидно, в конце последует просьба поделиться "железом".
Спасибо. Сам разобрался...
Молодец!
А впредь, сначала пробуйте сами, а потом уж постите.