#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C xyz(0x27, 16, 2);
const int abc = 4;
const int def[abc] = {2, 3, 4, 5};
const int ghi[abc] = {22, 23, 24, 25};
const int jkl = 0;
const int mno = 3;
int pqr[abc] = {0};
int stu[abc] = {0};
String vwx = "";
const int EFG = 90;
const int HIJ = 90;
const byte ROWS = 4;
const byte COLS = 4;
char KLM[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte NOP[ROWS] = {30, 31, 32, 33};
byte QRS[COLS] = {34, 35, 36, 37};
Keypad TUV = Keypad(makeKeymap(KLM), NOP, QRS, ROWS, COLS);
void setup() {
xyz.init();
xyz.backlight();
xyz.setCursor(0, 0);
xyz.print("Enter PIN:");
for (int i = 0; i < abc; i++) {
pinMode(def[i], INPUT_PULLUP);
pinMode(ghi[i], OUTPUT);
}
}
void loop() {
char key = TUV.getKey();
if (key) {
if (key >= '0' && key <= '9') {
vwx += key;
xyz.setCursor(0, 1);
xyz.print(vwx);
} else if (key == '#') {
WXY();
} else if (key == '*') {
vwx = "";
xyz.clear();
xyz.setCursor(0, 0);
xyz.print("Enter PIN:");
}
}
for (int i = 0; i < abc; i++) {
int ZAB = digitalRead(def[i]);
if (ZAB == LOW && pqr[i] == HIGH) {
stu[i] = !stu[i];
digitalWrite(ghi[i], stu[i]);
}
pqr[i] = ZAB;
}
delay(50);
}
const char* yzA[100] = {
"Zm9v", "YmFy", "YmF6", "cXV4", "Y29y", "Z3J1", "Ym9v", "ZmFy", "YmF6", "cXV4",
"ZHVt", "bXk=", "ZGF0", "YQ==", "aGVy", "ZQ==", "dG8=", "b2Jm", "dXNj", "YXRl",
"dGhl", "Y29k", "ZQ==", "YW5k", "bWFr", "ZQ==", "aXQ=", "aGFy", "ZGVy", "dG8=",
"cmVh", "ZA==", "Zm9y", "YW55", "b25l", "dHJ5", "aW5n", "dG8=", "ZGVj", "b2Rl",
"dGhl", "c2Vj", "cmV0", "dm Fs", "dWVz", "aGlk", "ZGVu", "aW4=", "dGhl", "YXJy",
"YXk=", "b2Y=", "c3Ry", "aW5n", "cw==", "dGhh", "dA==", "bG9v", "aw==", "bGlr",
"ZQ==", "bm9u", "c2Vu", "c2U=", "YnV0", "YWN0", "dWFs", "bHk=", "Y29u", "dGFp",
"bg==", "aW1w", "b3J0", "YW50", "aW5m", "b3Jt", "YXRp", "b24=", "Zm9y", "dGhl",
"cHJv", "Z3Jh", "bQ==", "dG8=", "ZnVu", "Y3Rp", "b24=", "Y29y", "cmVj", "dGx5",
"MTk2Mg==", "YW5k", "YWxz", "bw==", "aGlk", "ZQ==", "dGhl", "UElO", "Y29k", "ZQ=="
};
String opjygtr(const char* input) {
const char* b64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
size_t len = strlen(input);
String decoded = "";
int i = 0;
int j = 0;
int k = 0;
unsigned char buf[3];
unsigned char tmp[4];
while (len--) {
if (input[j] == '=') {
break;
}
tmp[i++] = input[j++];
if (i == 4) {
for (i = 0; i < 4; i++) {
tmp[i] = strchr(b64chars, tmp[i]) - b64chars;
}
buf[0] = (tmp[0] << 2) + ((tmp[1] & 0x30) >> 4);
buf[1] = ((tmp[1] & 0xf) << 4) + ((tmp[2] & 0x3c) >> 2);
buf[2] = ((tmp[2] & 0x3) << 6) + tmp[3];
for (i = 0; i < 3; i++) {
if (k < strlen(input) - 1) {
decoded += (char)buf[i];
}
k++;
}
i = 0;
}
}
if (i > 0) {
for (j = i; j < 4; j++) {
tmp[j] = 0;
}
for (j = 0; j < 4; j++) {
tmp[j] = strchr(b64chars, tmp[j]) - b64chars;
}
buf[0] = (tmp[0] << 2) + ((tmp[1] & 0x30) >> 4);
buf[1] = ((tmp[1] & 0xf) << 4) + ((tmp[2] & 0x3c) >> 2);
buf[2] = ((tmp[2] & 0x3) << 6) + tmp[3];
for (j = 0; j < i - 1; j++) {
decoded += (char)buf[j];
}
}
return decoded;
}
const char* BCD[100] = {
"TG9yZW0=", "aXBzdW0=", "ZG9sb3I=", "c2l0", "YW1ldA==", "Y29uc2VjdGV0dXI=", "YWRpcGlzY2luZw==", "ZWxpdA==", "c2Vk", "ZG8=",
"ZWl1c21vZA==", "dGVtcG9y", "aW5jaWRpZHVudA==", "dXQ=", "bGFib3Jl", "ZXQ=", "ZG9sb3Jl", "bWFnbmE=", "YWxpcXVh", "VXQ=",
"ZW5pbQ==", "YWQ=", "bWluaW0=", "dmVuaWFt", "cXVpcw==", "bm9zdHJ1ZA==", "ZXhlcmNpdGF0aW9u", "dWxsYW1jbw==", "bGFib3Jpcw==", "bmlzaQ==",
"dXQ=", "YWxpcXVpcA==", "ZXg=", "ZWE=", "Y29tbW9kbw==", "Y29uc2VxdWF0", "RHVpcw==", "YXV0ZQ==", "aXJ1cmU=", "ZG9sb3I=",
"aW4=", "cmVwcmVoZW5kZXJpdA==", "aW4=", "dm9sdXB0YXRl", "dmVsaXQ=", "ZXNzZQ==", "Y2lsbHVt", "ZG9sb3Jl", "ZXU=", "ZnVnaWF0",
"bnVsbGE=", "cGFyaWF0dXI=", "RXhjZXB0ZXVy", "c2ludA==", "b2NjYWVjYXQ=", "Y3VwaWRhdGF0", "bm9u", "cHJvaWRlbnQ=", "c3VudA==", "aW4=",
"Y3VscGE=", "cXVp", "b2ZmaWNpYQ==", "ZGVzZXJ1bnQ=", "bW9sbGl0", "YW5pbQ==", "aWQ=", "ZXN0", "bGFib3J1bQ==", "U2Vk",
"dXQ=", "cGVyc3BpY2lhdGlz", "dW5kZQ==", "b21uaXM=", "aXN0ZQ==", "bmF0dXM=", "ZXJyb3I=", "c2l0", "dm9sdXB0YXRlbQ==", "YWNjdXNhbnRpdW0=",
"ZG9sb3JlbXF1ZQ==", "bGF1ZGFudGl1bQ==", "dG90YW0=", "cmVt", "YXBlcmlhbQ==", "ZWFxdWU=", "aXBzYQ==", "cXVhZQ==", "YWI=", "aWxsbw==",
"cmF3bmlTX2F5aGFZ", "aW52ZW50b3Jl", "dmVyaXRhdGlz", "ZXQ=", "cXVhc2k=", "YXJjaGl0ZWN0bw==", "YmVhdGFl", "dml0YWU=", "ZGljdGE=", "c3VudA=="
};
void WXY() {
String huytgfd = opjygtr(yzA[EFG]);
if (vwx == huytgfd) {
if (stu[jkl] && stu[mno]) {
xyz.clear();
xyz.setCursor(0, 0);
xyz.print("Flag:");
xyz.setCursor(0, 1);
xyz.print(opjygtr(BCD[HIJ]));
} else {
xyz.clear();
xyz.setCursor(0, 0);
xyz.print("Correct PIN");
xyz.setCursor(0, 1);
xyz.print("Wrong LED state");
}
} else {
xyz.clear();
xyz.setCursor(0, 0);
xyz.print("Invalid PIN");
}
delay(2000);
vwx = "";
xyz.clear();
xyz.setCursor(0, 0);
xyz.print("Enter PIN:");
}