#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x26, 16, 3);
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {34, 36, 38, 40};
byte colPins[COLS] = {26, 28, 30, 32};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
char inputSequence[4] = " ";
int inputNumber = 0;
void setup() {
lcd.init();
lcd.clear();
lcd.backlight();
Serial.begin(115200);
lcd.print("Welcome");
}
void loop() {
char key = customKeypad.getKey();
if (key) {
Serial.print(key);
inputSequence[inputNumber] = customKeypad.getKey();
inputNumber++;
lcd.setCursor(inputNumber, 1);
lcd.print(key);
}
}
i have started on what is supposed to be an objective device for airsoft/paintball that requires you to enter a series of codes to disarm said device. i cannot for the life of me figure out how i am going to make the password portion. this device requires you to enter 4, 4 digit alphanumeric codes with numbers that will be displayed on screen in a specific sequence. you must then enter the codes in said sequence from left to right. what i just stated does not matter as i can most likely complete the rest of them with an example for storing and confirming whether just 1 code is indeed correct or incorrect.
Welcome
char inputSequence[4] = " ";
This string is 5 characters not 4, you should have a warning or an error about it
See this nice example, it may help : electronic-safe.ino - Wokwi Arduino and ESP32 Simulator
works just fine with 4. the code i showed is just the code that will display the code onto the lcd. i will go check out what you sent me.
what you sent me uses EEPROM. to my understanding there is only a finite amount of writing you can do with EEPROM. to make the boards last as long as possible i want to avoid that
The EEPROM would only be written when you wish to change the key code. I doubt you propose to do that several thousand times, let alone approach the durability of the EEPROM.
So there is no point discussing snippets, is there?
several hours and many fried brain cells later i finally made something thats fully functional. ill post it in a sec.
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x26, 16, 3);
const int ROW_NUM = 4;
const int COLUMN_NUM = 4;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {34, 36, 38, 40};
byte pin_column[COLUMN_NUM] = {26, 28, 30, 32};
Keypad customKeypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
const String rand1 = "4478";
const String rand2 = "6940";
const String rand3 = "3312";
const String rand4 = "1675";
String ipass;
String ipass2;
String ipass3;
String ipass4;
int code_pos = 0;
char inputSequence[4] = " ";
int inputNumber = -1;
int inputNumber2 = 0;
int inputNumber3 = 0;
int inputNumber4 = 0;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.clear();
lcd.backlight();
ipass.reserve(32);
ipass2.reserve(32);
ipass3.reserve(32);
ipass4.reserve(32);
lcd.setCursor(0, 0);
lcd.print(rand1);
lcd.setCursor(5, 0);
lcd.print(rand2);
lcd.setCursor(10, 0);
lcd.print(rand3);
lcd.setCursor(15, 0);
lcd.print(rand4);
lcd.setCursor(4, 0);
lcd.print('|');
lcd.setCursor(4, 1);
lcd.print('|');
lcd.setCursor(4, 2);
lcd.print('|');
lcd.setCursor(4, 3);
lcd.print('|');
lcd.setCursor(9, 0);
lcd.print('|');
lcd.setCursor(9, 1);
lcd.print('|');
lcd.setCursor(9, 2);
lcd.print('|');
lcd.setCursor(9, 3);
lcd.print('|');
lcd.setCursor(14, 0);
lcd.print('|');
lcd.setCursor(14, 1);
lcd.print('|');
lcd.setCursor(14, 2);
lcd.print('|');
lcd.setCursor(14, 3);
lcd.print('|');
}
void loop() {
if (code_pos == 0) {
char key = customKeypad.getKey();
if (key) {
Serial.print(key);
inputSequence[inputNumber] = customKeypad.getKey();
inputNumber++;
lcd.setCursor(inputNumber, 3);
lcd.print(key);
if (key == '*') {
lcd.setCursor(0, 3);
lcd.print(" ");
inputNumber = -1;
ipass = "";
}
else if (key == '#') {
if (rand1 == ipass) {
Serial.println("rand1 is correct");
lcd.setCursor(4, 3);
lcd.print("|");
lcd.setCursor(0, 1);
lcd.print("crct");
code_pos = 1;
}
else {
Serial.println("rand1 is incorrect");
lcd.setCursor(0, 2);
lcd.print("icrt");
lcd.setCursor(0, 3);
lcd.print(" ");
inputNumber = -1;
}
ipass = "";
}
else {
ipass += key;
}
}
}
if (code_pos == 1) {
char key2 = customKeypad.getKey();
if (key2) {
inputSequence[inputNumber2] = customKeypad.getKey();
inputNumber++;
lcd.setCursor(inputNumber, 3);
lcd.print(key2);
Serial.print(key2);
if (key2 == '*') {
lcd.setCursor(5, 3);
lcd.print(" ");
inputNumber = 4;
ipass2 = "";
}
else if (key2 == '#') {
if (rand2 == ipass2) {
Serial.println("rand2 is correct");
lcd.setCursor(9, 3);
lcd.print("|");
lcd.setCursor(5, 1);
lcd.print("crct");
code_pos = 2;
}
else {
Serial.println("rand2 is incorrect");
lcd.setCursor(5, 2);
lcd.print("icrt");
lcd.setCursor(5, 3);
lcd.print(" ");
inputNumber = 4;
}
ipass2 = "";
}
else {
ipass2 += key2;
}
}
}
if (code_pos == 2) {
char key3 = customKeypad.getKey();
if (key3) {
inputSequence[inputNumber3] = customKeypad.getKey();
inputNumber++;
lcd.setCursor(inputNumber, 3);
lcd.print(key3);
Serial.print(key3);
if (key3 == '*') {
lcd.setCursor(10, 3);
lcd.print(" ");
inputNumber = 9;
ipass3 = "";
}
else if (key3 == '#') {
if (rand3 == ipass3) {
Serial.println("rand3 is correct");
lcd.setCursor(14, 3);
lcd.print("|");
lcd.setCursor(10, 1);
lcd.print("crct");
code_pos = 3;
}
else {
Serial.println("rand3 is incorrect");
lcd.setCursor(10, 2);
lcd.print("icrt");
lcd.setCursor(10, 3);
lcd.print(" ");
inputNumber = 9;
}
ipass3 = "";
}
else {
ipass3 += key3;
}
}
}
if (code_pos == 3) {
char key4 = customKeypad.getKey();
if (key4) {
inputSequence[inputNumber4] = customKeypad.getKey();
inputNumber++;
lcd.setCursor(inputNumber, 3);
lcd.print(key4);
Serial.print(key4);
if (key4 == '*') {
lcd.setCursor(15, 3);
lcd.print(" ");
inputNumber = 14;
ipass4 = "";
}
else if (key4 == '#') {
if (rand4 == ipass4) {
Serial.println("rand4 is correct");
lcd.setCursor(19, 3);
lcd.print("|");
lcd.setCursor(15, 1);
lcd.print("crct");
code_pos = 4;
}
else {
Serial.println("rand4 is incorrect");
lcd.setCursor(15, 2);
lcd.print("icrt");
lcd.setCursor(15, 3);
lcd.print(" ");
inputNumber = 14;
}
ipass4 = "";
}
else {
ipass4 += key4;
}
}
}
}
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.