#include "U8glib.h"
#include <Keypad.h>
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}};
uint8_t colPins[COLS] = {5, 4, 3, 2}; // Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = {9, 8, 7, 6}; // Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST);
int angle = 0;
int currentMenu = 0; // 0-loading, 1-lockscreen, 3-desktop
int loadingFrame = 0;
void setup()
{
u8g.setFont(u8g_font_tpssb);
u8g.setColorIndex(1);
}
void loading()
{
u8g.firstPage();
do
{
u8g.drawCircle(64, 32, 20);
u8g.drawCircle(64, 32, 19);
u8g.drawCircle(64, 32, 18);
u8g.drawCircle(64, 32, 17);
u8g.drawCircle(64, 32, 16);
int x = 64 + 20 * cos(radians(angle));
int y = 32 + 20 * sin(radians(angle));
u8g.setColorIndex(0);
u8g.drawDisc(x, y, 10);
u8g.setColorIndex(1);
} while (u8g.nextPage());
angle += 15;
if (angle >= 360)
{
angle = 0;
}
loadingFrame += 15;
if (loadingFrame >= 1000)
{
currentMenu = 1;
return;
}
}
void lockscreen()
{
u8g.firstPage();
do
{
u8g.setFont(u8g_font_helvB18);
int timeWidth = u8g.getStrWidth("18:08");
u8g.drawStr((u8g.getWidth() - timeWidth) / 2, 20, "18:08");
u8g.setFont(u8g_font_6x10);
int dateWidth = u8g.getStrWidth("1/1/2025");
u8g.drawStr((u8g.getWidth() - dateWidth) / 2, 30, "1/1/2025");
u8g.setFont(u8g_font_helvB08);
int pressWidth = u8g.getStrWidth("Press any key");
u8g.drawStr((u8g.getWidth() - pressWidth) / 2, 50, "Press any key");
int unlockWidth = u8g.getStrWidth("to unlock");
u8g.drawStr((u8g.getWidth() - unlockWidth) / 2, 60, "to unlock");
} while (u8g.nextPage());
}
const uint8_t calculatorIcon[] = {
0x00, 0x00, 0x7d, 0xf0, 0x6d, 0xf0, 0x45, 0x10, 0x6d, 0xf0, 0x7d, 0xf0, 0x00, 0x00, 0x7d, 0xf0,
0x7d, 0xb0, 0x6d, 0xf0, 0x7d, 0xb0, 0x7d, 0xf0, 0x00, 0x00};
void desktop()
{
u8g.firstPage();
do
{
u8g.setFont(u8g_font_6x10);
int timeWidth = u8g.getStrWidth("18:08");
u8g.drawStr((u8g.getWidth() - timeWidth) / 2, 0, "18:08");
u8g.drawBitmap(20, 70, 13, 13, calculatorIcon);
} while (u8g.nextPage());
}
void loop()
{
char key = keypad.getKey();
if (key != NO_KEY)
{
if (currentMenu == 1)
{
currentMenu = 2;
}
}
switch (currentMenu)
{
case 0:
desktop();
break;
case 1:
lockscreen();
default:
break;
}
delay(50);
}