#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
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 colPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
byte rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String password=" ";
#define imgwidth 48
#define imgheight 48
static const unsigned char PROGMEM angry[] = {
0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x07,
0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x70,
0x00, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x07, 0x00, 0x01, 0x98, 0x00, 0x00, 0x19, 0x80,
0x03, 0x1E, 0x00, 0x00, 0x78, 0xC0, 0x06, 0x07, 0x80, 0x01, 0xE0, 0x60, 0x0E, 0x01, 0xE0, 0x07,
0x80, 0x70, 0x0C, 0x00, 0x78, 0x1E, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x00, 0x18, 0x38, 0x00,
0x00, 0x00, 0x00, 0x1C, 0x30, 0x07, 0x80, 0x01, 0xE0, 0x0C, 0x30, 0x1F, 0xE0, 0x07, 0xF8, 0x0C,
0x60, 0x18, 0x60, 0x06, 0x18, 0x06, 0x60, 0x30, 0x30, 0x0C, 0x0C, 0x06, 0x60, 0x30, 0x30, 0x0C,
0x0C, 0x06, 0xC0, 0x30, 0x30, 0x0C, 0x0C, 0x03, 0xC0, 0x30, 0x30, 0x0C, 0x0C, 0x03, 0xC0, 0x18,
0x60, 0x06, 0x18, 0x03, 0xC0, 0x1F, 0xE0, 0x07, 0xF8, 0x03, 0xC0, 0x07, 0x80, 0x01, 0xE0, 0x03,
0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x60, 0x00,
0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x0F, 0xF0, 0x00, 0x06, 0x60, 0x00, 0x7F, 0xFE, 0x00, 0x06,
0x30, 0x01, 0xF0, 0x0F, 0x80, 0x0C, 0x30, 0x07, 0x80, 0x01, 0xE0, 0x0C, 0x38, 0x0F, 0x00, 0x00,
0xF0, 0x1C, 0x18, 0x1C, 0x00, 0x00, 0x38, 0x18, 0x0C, 0x38, 0x00, 0x00, 0x1C, 0x30, 0x0E, 0x30,
0x00, 0x00, 0x0C, 0x70, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0,
0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0xE0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x00,
0x0E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x07,
0xE0, 0x07, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00
};
static const unsigned char PROGMEM face[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x06, 0x00, 0xE0, 0x00, 0x00, 0x03, 0x87, 0x01,
0xC0, 0x00, 0x00, 0x01, 0xC3, 0xC3, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xBF, 0x80, 0x00, 0x00, 0x01, 0xF1, 0x8D, 0xE0, 0x00, 0x00, 0x07, 0xB1, 0x8C, 0x78, 0x00,
0x00, 0x0E, 0x18, 0x18, 0x1C, 0x00, 0x00, 0x1C, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00,
0x07, 0x00, 0x00, 0x30, 0x00, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0xC0, 0x18, 0x06, 0x03, 0xF8,
0x3C, 0xE0, 0x00, 0x00, 0x07, 0x3C, 0x30, 0x60, 0x00, 0x00, 0x06, 0x0C, 0x60, 0xE0, 0x30, 0x02,
0x07, 0x06, 0x61, 0xC0, 0xFC, 0x1F, 0xC3, 0x86, 0x60, 0x03, 0xCE, 0x3D, 0xE0, 0x06, 0x60, 0x07,
0x03, 0x70, 0x70, 0x06, 0x70, 0x1E, 0x03, 0xE0, 0x3C, 0x1E, 0x7C, 0x78, 0x01, 0xE0, 0x1F, 0xFE,
0x7F, 0xF0, 0x01, 0xE0, 0x07, 0xE6, 0x73, 0x80, 0x01, 0xE0, 0x00, 0x0E, 0x30, 0x00, 0x03, 0xE0,
0x00, 0x0C, 0x18, 0x00, 0x07, 0x30, 0x00, 0x1C, 0x1E, 0x00, 0x1E, 0x3C, 0x00, 0x78, 0x07, 0xFF,
0xFC, 0x1F, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x01, 0xC0,
0x00, 0x60, 0x00, 0x00, 0x01, 0x80, 0x00, 0x70, 0x00, 0x00, 0x03, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07,
0x00, 0x00, 0x70, 0x00, 0x00, 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x00,
0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0E,
0x00, 0x00, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x00,
0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static const unsigned char PROGMEM cat[] = {
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x07, 0x00, 0x01, 0xF0, 0x00, 0x00,
0x0F, 0x80, 0x03, 0xBC, 0x00, 0x00, 0x3D, 0xC0, 0x03, 0x0E, 0x00, 0x00, 0x70, 0xC0, 0x06, 0x07,
0x00, 0x00, 0xE0, 0x60, 0x06, 0x03, 0x80, 0x01, 0xC0, 0x60, 0x0C, 0x01, 0xC0, 0x03, 0x80, 0x30,
0x0C, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x18, 0x00, 0x60, 0x06, 0x00, 0x18, 0x18, 0x00, 0x30, 0x0C,
0x00, 0x18, 0x18, 0x00, 0x3F, 0xFC, 0x00, 0x18, 0x30, 0x00, 0x3F, 0xFC, 0x00, 0x0C, 0x30, 0x00,
0x00, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06,
0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0xC0, 0x07,
0x80, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xC0, 0x0C, 0xC0, 0x06, 0x60, 0x03,
0xC0, 0x0E, 0xC0, 0x07, 0x60, 0x03, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x01,
0xC0, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xC3, 0xC0,
0x3F, 0xF0, 0x0F, 0x03, 0xC1, 0xFF, 0x18, 0x63, 0xFF, 0x03, 0xC0, 0x3F, 0xEC, 0xDF, 0xF0, 0x03,
0xC0, 0x00, 0xEF, 0xCC, 0x00, 0x03, 0xC3, 0xC0, 0x07, 0x80, 0x0F, 0x03, 0x63, 0xFE, 0x03, 0x01,
0xFF, 0x06, 0x60, 0x3F, 0xE3, 0x1F, 0xF0, 0x06, 0x70, 0x01, 0xE3, 0x1E, 0x00, 0x0E, 0x30, 0x00,
0x03, 0x00, 0x00, 0x0C, 0x38, 0x00, 0x03, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x03, 0x00, 0x00, 0x38,
0x0E, 0x00, 0x02, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0xC0, 0x00, 0x00,
0x03, 0xC0, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F,
0xF0, 0x0F, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00
};
static const unsigned char PROGMEM cool[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,
0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,
0x00, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80,
0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x00, 0x00,
0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x3C,
0x20, 0x00, 0x0F, 0x00, 0x00, 0x7C, 0x38, 0x00, 0x0F, 0x00, 0x00, 0xF8, 0x3E, 0x00, 0x0F, 0x80,
0x01, 0xE0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7D, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFD, 0xC0, 0x0F, 0xFF,
0xFF, 0xFF, 0xFE, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x0F, 0xFF, 0xFF, 0xEF, 0x0E, 0x18,
0x07, 0xFF, 0xFF, 0x8F, 0x0E, 0x18, 0x03, 0xFF, 0xFF, 0x0F, 0x0C, 0x78, 0x03, 0xFF, 0xFE, 0x00,
0x0C, 0x60, 0x01, 0xFF, 0xFE, 0x06, 0x08, 0x70, 0x00, 0xFF, 0xFC, 0x0F, 0x98, 0x30, 0x00, 0xFF,
0xF8, 0x07, 0xD0, 0x10, 0x00, 0x7C, 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x0C, 0xFC, 0x00,
0x00, 0x1F, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0xFF, 0x9F, 0xC0, 0x00, 0x07, 0xFF, 0xFE,
0x0F, 0xE0, 0x00, 0x03, 0xFF, 0xFC, 0x03, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x01, 0xC0, 0x00, 0x00,
0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup() {
Serial.begin(9600);
pinMode(13, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Connecting to SSID\n'adafruit':");
display.setCursor(0,0);
display.display();
}
void loop() {
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
for(byte i=0; i<=8; i++) {
while (password[i] == ' ') {
char key = keypad.getKey();
if (key != NO_KEY) {
display.print(key);
display.display();
password[i] = key;
}
}
}
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setCursor(0,20);
if (password == "103600160") {
drawface();
display.setTextColor(SSD1306_WHITE);
display.println("Welcome");
display.println("Gabe B");
}
else if (password == "103597673") {
drawcool();
display.setTextColor(SSD1306_WHITE);
display.println("Welcome");
display.println("Gabe T");
}
else if (password == "103118087") {
drawcat();
display.setTextColor(SSD1306_WHITE);
display.println("Welcome");
display.println("Emily");
}
else {
drawangry();
display.setTextColor(SSD1306_WHITE);
display.println("Access");
display.println("Denied");
}
display.display();
display.clearDisplay();
while(keypad.getKey()!='D'){}
display.display();
password=" ";
}
void drawangry() {
display.clearDisplay();
display.drawBitmap((display.width() - imgwidth) , (display.height() - imgheight) / 2, angry, imgwidth, imgheight, 1);
}
void drawface() {
display.clearDisplay();
display.drawBitmap((display.width() - imgwidth) , (display.height() - imgheight) / 2, face, imgwidth, imgheight, 1);
}
void drawcool() {
display.clearDisplay();
display.drawBitmap((display.width() - imgwidth) , (display.height() - imgheight) / 2, cool, imgwidth, imgheight, 1);
}
void drawcat() {
display.clearDisplay();
display.drawBitmap((display.width() - imgwidth) , (display.height() - imgheight) / 2, cat, imgwidth, imgheight, 1);
}