#include <Wire.h>
#include <U8x8lib.h>
#include <Keypad.h>
#define OLED_RESET U8X8_PIN_NONE
U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(OLED_RESET);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int selectedOption = 0;
int costomkey;
void setup() {
Wire.begin();
u8x8.begin();
u8x8.setFont(u8x8_font_chroma48medium8_r); // Set the font
u8x8.clear();
welcomeScreen();
}
void loop() {
if (selectedOption == 0) {
takePassword();
} else if (selectedOption == 1) {
main_menu();
}
// Add other menu options here
}
void welcomeScreen() {
u8x8.drawString(0, 0, "Secure Wireless");
u8x8.drawString(0, 1, "System");
delay(2000);
u8x8.clear();
}
void takePassword() {
u8x8.drawString(0, 0, "Enter Password:");
char inputPassword[3]; // Assuming password length is 2 digits
inputPassword[0] = '\0'; // Initialize the string
char key;
byte charCount = 0;
while (charCount < 2) {
key = keypad.getKey();
if (key && charCount < 2) {
inputPassword[charCount++] = key;
inputPassword[charCount] = '\0'; // Null-terminate the string
u8x8.clearLine(1);
u8x8.drawString(0, 1, inputPassword);
delay(200);
}
}
int password = atoi(inputPassword); // Convert C-style string to integer
if (password == 12) {
main_menu();
} else {
u8x8.clear();
u8x8.drawString(0, 0, "Incorrect");
u8x8.drawString(0, 1, "Password");
delay(2000);
u8x8.clear();
}
}
void main_menu() {
u8x8.clear();
u8x8.drawString(0, 0, "1. Customize ");
u8x8.drawString(0, 1, "2. Normal ");
char key = keypad.waitForKey();
if (key == '1') {
lane_menu();
} else if (key == '2') {
normal_menu();
}
}
void lane_menu() {
u8x8.clear();
u8x8.drawString(0, 0, "Select Option :");
u8x8.drawString(0, 1, "1. Lane 1");
u8x8.drawString(0, 2, "2. Lane 2");
u8x8.drawString(0, 3, "3. Lane 3");
u8x8.drawString(0, 4, "4. Lane 4");
u8x8.drawString(0, 5, "5. Back");
costomkey = keypad.waitForKey();
if (costomkey == '1') {
lane1_light();
}
else if (costomkey == '2') {
lane2_light();
}
else if (costomkey == '3') {
lane3_light();
}
else if (costomkey == '4') {
lane4_light();
}
else if (costomkey == '5') {
main_menu();
}
}
void lane1_light() {
u8x8.clear();
u8x8.drawString(0, 0, "Lane 1 Control : ");
u8x8.drawString(0, 1, "1. Red");
u8x8.drawString(0, 2, "2. Green");
u8x8.drawString(0, 3, "3. Back");
char key = keypad.waitForKey();
if (key == '1' || key == '2') {
control();
} else if (key == '3') {
lane_menu();
}
}
void lane2_light() {
u8x8.clear();
u8x8.drawString(0, 0, "Lane 2 Control : ");
u8x8.drawString(0, 1, "1. Red");
u8x8.drawString(0, 2, "2. Green");
u8x8.drawString(0, 3, "3. Back");
char key = keypad.waitForKey();
if (key == '1' || key == '2') {
control();
} else if (key == '3') {
lane_menu();
}
}
void lane3_light() {
u8x8.clear();
u8x8.drawString(0, 0, "Lane 3 Control : ");
u8x8.drawString(0, 1, "1. Red");
u8x8.drawString(0, 2, "2. Green");
u8x8.drawString(0, 3, "3. Back");
char key = keypad.waitForKey();
if (key == '1' || key == '2') {
control();
} else if (key == '3') {
lane_menu();
}
}
void lane4_light() {
u8x8.clear();
u8x8.drawString(0, 0, "Lane 4 Control : ");
u8x8.drawString(0, 1, "1. Red");
u8x8.drawString(0, 2, "2. Green");
u8x8.drawString(0, 3, "3. Back");
char key = keypad.waitForKey();
if (key == '1' || key == '2') {
control();
} else if (key == '3') {
lane_menu();
}
}
void normal_menu() {
u8x8.clear();
u8x8.drawString(0, 0, "1. Option 1");
u8x8.drawString(0, 1, "2. Option 2");
u8x8.drawString(0, 2, "3. Back");
char key = keypad.waitForKey();
if (key == '1' || key == '2') {
control();
} else if (key == '3') {
main_menu();
}
}
void control() {
// Implement your control logic here
u8x8.clear();
lane_menu();
}