Цифровая блокировка кода с использованием Arduino и ЖК-дисплеем
Пользователю будет предложено установить пароль при установке. Этот пароль, введенный при установке, будет продолжать выполнять блокировку до тех пор, пока она не будет изменена. Пользователь может изменить текущий пароль одним нажатием клавиши. Программа проверяет текущий пароль и позволяет пользователю изменять пароль только в том случае, если текущий пароль введен правильно.
Необходимые знания
Перед попыткой этого проекта вы должны изучить две важные концепции сопряжения устройств. Самый первый - это интерфейс с клавиатурой с Arduino . Второй - интерфейс LCD с Arduino . После того, как вы поймете концепцию взаимодействия интерфейсного модуля LCD и интерфейсной шестнадцатеричной клавиатуры, просто нужно добавить несколько строк кода для создания блокировки цифрового кода. Я рекомендую прочитать простой цифровой кодовый замок с помощью arduino, а также получить представление об основах блокировки кода.
Примечание. - В этой программе я повторно использовал код, разработанный для сопряжения шестнадцатеричной клавиатуры с ардуино. В учебном интерфейсе есть две версии программы. Я использовал версию 2.
О программе
Я буду объяснять важные моменты только о программе. Как уже упоминалось ранее, вы должны знать коды интерфейсной шестнадцатеричной клавиатуры и модуля lcd.
Использование устройства
Установка - вам будет предложено ввести 5 цифр в качестве пароля при начальной загрузке / сбросе устройства. Первые 5 цифр, которые вы вводите при установке, будут сохранены как ваш ПАРОЛЬ SET. После установки PASSWORD устройство будет отключено.
Ключ A - для разблокировки устройства. Введите правильный пароль и нажмите A для разблокировки.
Ключ B - для блокировки в любое время. Просто нажмите B, и вы увидите сообщение LOCKED.
Клавиша C - для смены пароля. Введите правильный пароль и нажмите C. Появится сообщение с просьбой ввести НОВЫЙ ПАРОЛЬ . Введите 5 цифр в качестве пароля. Первые 5 цифр, которые вы вводите, будут сохранены как НОВЫЙ ПАРОЛЬ.
Исключения. Вы не можете использовать клавиши «A», «B» и «C» внутри комбинации паролей. Эти 3 клавиши являются управляющими клавишами устройства с определенными функциями. Программа проверяет эти нажатия клавиш (во время установки пароля - вы можете увидеть функцию SetPassword () и посмотреть условие, чтобы проверить недействительное нажатие клавиши ) и идентифицирует их как недопустимые ключи . Вам нужно будет ввести 5 новых цифр в качестве пароля после нажатия клавиши «Недействительный ключ».
Важные переменные и массивы
pass [6] - это массив, используемый для сохранения и хранения пользовательского пароля.
check [6] - это массив, используемый для сбора и хранения пользовательского ввода. Эти пользовательские входные данные (в массиве check [] ) сравниваются с массивом pass [] для аутентификации пароля.
entry - это переменная, используемая для определения начальной точки входа в программу. Пользователю предлагается установить 5-значный пароль при установке Lock. Следовательно, нам нужна переменная, чтобы идентифицировать запись и цикл 5 раз, чтобы собрать 5 цифр и сохранить их, чтобы передать [] массив. Одну и ту же переменную позже используют для смены пароля. Когда нажата клавиша для изменения пароля (здесь «C»), этой переменной просто присваивается нулевое значение (начальное состояние переменной). Это заставляет программный контроллер повторно вводить петлю настройки пароля программы.
key_id - это переменная, используемая для идентификации нажатия клавиши и выполнения некоторых действий в программе (это должно произойти только при нажатии клавиши). По умолчанию для этой переменной задано нулевое начальное значение. Всякий раз, когда клавиша нажата в клавиатуре, этой переменной присваивается значение = 1. Вы можете проверить функцию keyscan (), чтобы увидеть это. Этот простой трюк помогает идентифицировать нажатие клавиши и выполнять различные действия по нажатию клавиши (в зависимости от значения нажатия клавиши). Эта переменная устанавливается в ноль в разных точках программы (чтобы исключить значение 1 в переменной key_id как ложное нажатие). Вы также можете проверить их.
Примечание: - col_scan - это действительная переменная, которая активируется при нажатии LOW при нажатии клавиши (следовательно, помогает идентифицировать нажатие клавиши). Но эта переменная на самом деле является частью программы сопряжения клавишных клавиш (версия 2).
count - это переменная, используемая для итерации индекса проверки [count] (пользовательский входной массив). count variable инициализируется 1. Каждый пользовательский ввод будет сохранен для проверки [] массива в порядке возрастания переменной count.
temp_press - временная переменная для хранения значения нажатия клавиши. Значение нажатия клавиши назначается переменной temp_press как результат возврата функции keypress () . keypress () - это функция, определенная для определения значения нажатия клавиши.
lcd_count - простая переменная счетчика, используемая для итерации положения столбца модуля LCD. Эта переменная помогает отображать пользовательские входные данные последовательно в строке 2 ЖК-модуля.
i, j, flag - это просто фиктивные переменные, используемые в программе. i, j используются в качестве счетных переменных внутри цикла. flag используется для хранения статуса функции checkPassword () (функция, используемая для сравнения пользовательских входных данных и пароля SET). Решение принимается на основе значения внутри переменной флага.
Подпрограммы, используемые в Программе
SetPassword () - это подпрограмма, используемая для установки пользовательского пароля. Эта подпрограмма очень зависит от « Петли паролей », написанной внутри основной программы. Этот цикл установки пароля будет повторяться при установке устройства (то есть при загрузке или сбросе устройства) для первых 5 нажатий клавиш . Это первое пятизначное нажатие будет использоваться для установки пароля. Эти нажатия клавиш будут сохранены для передачи массива [] . Как упоминалось ранее, запись - это переменная, используемая для итерации цикла 5 раз. key_id - это переменная, используемая для идентификации нажатия клавиши.
Примечание: - Для « Изменение пароля » используется также « Параметр настройки пароля». При нажатии клавиши «C» текущий пароль проверяется. Если входной пароль соответствует текущему паролю SET, тогда переменная ввода будет присвоена нулевому значению. Это просто передаст управление программой, чтобы снова ввести петлю настройки пароля.
keyscan () - это подпрограмма сканирования клавиатуры для нажатия клавиши. Эта подпрограмма в основном такая же, как и код версии 2 для сопряжения шестнадцатеричной клавиатуры с ардуином. Я добавил некоторые строки кода, необходимые для этой блокировки кода. Кроме того, строки кода в этой подпрограмме такие же, как и для сопряжения клавиатуры. keyscan () сканирует нажатие клавиши (когда функция вызывается из главной программы или из других подпрограмм, таких как SetPassword ()) и идентифицирует строку и столбец нажатой клавиши. Если нажать клавишу «1» , keyscan идентифицирует, что клавиша в строке 1 и столбце 1 нажата. Аналогично, если нажата клавиша «6», ключевой кадр определяет, что клавиша нажата в строке 2 и столбце 3. Когда когда-либо нажат ключ, в подпрограмме keyscan () вызывается другая подпрограмма с именем keypress (). Эта процедура keypress () используется для определения значения нажатия клавиши (например, «1», «2», «3» или «A», «C» или «D» и т. Д.).
keypress () - как упоминалось выше, подпрограмма идентифицирует значение нажатия клавиши. Процедура keyscan () определяет, какая строка и столбец клавиатуры нажата. Этот номер строки и столбца передается в процедуру keypress () в качестве параметров (с использованием переменных значений i и j).
checkPassword () - это подпрограмма для проверки пароля ввода пользователя с помощью SET User Defined Password. Входные данные пользователя (пароль для перекрестной проверки) собираются в массиве check [] . Это сравнивается с массивом SET pass внутри pass [] . Для сравнения используется цикл for. Если каждая цифра внутри массивов соответствует, переменная флага останется равной нулю. Если произойдет какое-либо несоответствие, флаг будет установлен в 1, и цикл будет прерываться.
Вот и все, что вам нужно знать о программе. Прочтите программу ниже, и если у вас есть какие-либо сомнения, просто напишите комментарий.
программа
#include<LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
int row[]={A1,A0,8,9};// Defining row pins of keypad connected to Arduino pins
int col[]={10,11,12,13};//Defining column pins of keypad connected to Arduino
int i,j,lcd_count,count=1,key_id=0,flag,entry=0;// See About the Program
int col_scan;// Variable to identify a key press
char temp_press; // Variable to hold value of key press
char check[6],pass[6]; // See About the Program
void setup()
{
lcd.begin(16,2);
for(i=0;i<=3;i++)
{
pinMode(row[i],OUTPUT);
pinMode(col[i],INPUT);
digitalWrite(col[i],HIGH);
}
lcd.print("SET 5 Digit PASS");
}
/* Main Program Begins */
void loop()
{
while(entry<=4)// Password Setting Loop begins
{
SetPassword();
}
// Password Setting Loop Ends
key_id=0;
keyscan(); // Scan for a Key Press
/* Actions on Key Press begins */
if(key_id==1) // Condition to Check Key is Pressed
{
check[count]=temp_press;
count++;
/* Condition to Unlock Begins*/
if(temp_press=='A')
{
checkPassword();
if(flag==0)
{
lcd.setCursor(0,0);
lcd.print("UNLOCKED");
}else{
lcd.setCursor(0,0);
lcd.print("WRONG PASSWORD");
delay(200);
lcd.clear();
lcd.print("LOCKED");
}
count=1; // Resetting the counter variable
}
/* Condition to Unlock Ends*/
/* Condition to Change Password Begins */
else if(temp_press=='C')
{
checkPassword();
if(flag==0)
{
lcd.setCursor(0,0);
lcd.print("ENTER NEW PASS");
key_id=0;
entry=0;
}else{
lcd.setCursor(0,0);
lcd.print("WRONG PASSWORD");
}
count=1; // Resetting the counter variable
}
/* Condition to Change Password Ends */
/* Condition to LOCK Begins*/
else if(temp_press=='B')
{
lcd.setCursor(0,0);
lcd.print("LOCKED");
count=1; // Resetting the counter variable
}
/* Condition to LOCK Ends*/
}
/* Actions on Key Press Ends*/
}
/* Main Program Ends */
void SetPassword() // Subroutine to SET User Defined Password
{
keyscan();
if(key_id==1)
{
if(temp_press=='A'||temp_press=='C'||temp_press=='B') // Condition to Check for an Invalid Keypress
{
lcd.setCursor(0,0);
lcd.print("INVALID KEYS");
entry=0;
}
else
{
pass[entry]=temp_press;
}
}
key_id=0;
if(entry==5)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PASSWORD SET & LOCKED");
}} // Subroutine to SET Password ENDS
char keyscan()// Subroutine to Scan Keypad for a Keypress
{
for(i=0; i<=3; i++)
{
digitalWrite(row[0],HIGH);
digitalWrite(row[1],HIGH);
digitalWrite(row[2],HIGH);
digitalWrite(row[3],HIGH);
digitalWrite(row[i],LOW);
for(j=0; j<=3; j++)
{
col_scan=digitalRead(col[j]);
if(col_scan==LOW)
{
key_id=1;
entry++;
temp_press=keypress(i,j);
lcd.setCursor(lcd_count++,1);
lcd.print(temp_press);
if(temp_press=='A'||temp_press=='C'||temp_press=='B')
{
lcd_count=0;
lcd.clear();
}
delay(300);
break;
}}
}}// Subroutine to Scan Keypress Ends
char keypress(int i, int j) // Subroutine to Identify the value of Key pressed
{
if(i==0&&j==0)
{
return('1');
}
if(i==0&&j==1)
{
return('2');
}
if(i==0&&j==2)
{
return('3');
}
if(i==0&&j==3)
{
return('A');
}
if(i==1&&j==0)
{
return('4');
}
if(i==1&&j==1)
{
return('5');
}
if(i==1&&j==2)
{
return('6');
}
if(i==1&&j==3)
{
return('B');
}
if(i==2&&j==0)
{
return('7');
}
if(i==2&&j==1)
{
return('8');
}
if(i==2&&j==2)
{
return('9');
}
if(i==2&&j==3)
{
return('C');
}
if(i==3&&j==0)
{
return('*');
}
if(i==3&&j==1)
{
return('0');
}
if(i==3&&j==2)
{
return('#');
}
if(i==3&&j==3)
{
return('D');
}
} // Subroutine to identify Keypress Ends
void checkPassword() // Subroutine to Check User Input Data with SET Password
{
flag=0;
for(i=1;i<=5&&flag==0;i++)
{
if(check[i]==pass[i])
{
flag=0;
}
else
{flag=1;
}}} // Subroutine to check password ends