#include #include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int screenIndex = 0; unsigned long lastSwitch = 0; const unsigned long INTERVAL = 5000; int stockDayPads = 87; int stockNightPads = 42; int stockPantyLiner = 12; int cycleDay = 3; void setup() { Wire.begin(); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) while (true); display.clearDisplay(); display.display(); } void loop() { if (millis() - lastSwitch >= INTERVAL) { lastSwitch = millis(); screenIndex = (screenIndex + 1) % 6; } switch (screenIndex) { case 0: screenWelcome(); break; case 1: screenStockAlert(); break; case 2: screenMessages(); break; case 3: screenCycleDay(); break; case 4: screenHydration(); break; case 5: screenStockAll(); break; } display.display(); delay(100); } // SCREEN 1 — Original smiley face void screenWelcome() { display.clearDisplay(); display.drawCircle(38, 32, 26, WHITE); display.fillCircle(28, 25, 3, WHITE); display.fillCircle(48, 25, 3, WHITE); display.drawCircle(38, 38, 8, WHITE); display.fillRect(30, 28, 17, 10, BLACK); display.drawCircle(22, 40, 4, WHITE); display.drawCircle(54, 40, 4, WHITE); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(72, 22); display.println("Hi"); display.setCursor(72, 34); display.println("Micaela"); } // SCREEN 2 — Stock alert void screenStockAlert() { display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20, 2); display.println("! STOCK ALERT !"); display.drawLine(0, 12, 128, 12, WHITE); display.setCursor(0, 18); display.println("Panty liners:"); display.drawRect(0, 30, 98, 10, WHITE); int fillW = map(stockPantyLiner, 0, 100, 0, 96); display.fillRect(1, 31, fillW, 8, WHITE); display.setCursor(101, 30); display.print(stockPantyLiner); display.print("%"); display.setCursor(0, 46); display.println("Restock soon!"); } // SCREEN 3 — Notice void screenMessages() { display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(34, 4); display.println("! NOTICE !"); display.drawLine(0, 14, 128, 14, WHITE); display.setCursor(14, 22); display.println("Panty liners"); display.setCursor(4, 34); display.println("are running low."); display.setCursor(4, 46); display.println("Consider restocking soon"); } // SCREEN 4 — Cycle day void screenCycleDay() { display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(30, 2); display.println("CYCLE DAY"); display.drawLine(0, 12, 128, 12, WHITE); display.setTextSize(4); display.setCursor(50, 20); display.print(cycleDay); display.setTextSize(1); display.setCursor(4, 52); display.println("Moderate flow"); } // SCREEN 5 — Reminder with heart + Beautiful void screenHydration() { display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(28, 0); display.println("REMINDER"); display.drawLine(0, 10, 128, 10, WHITE); // Heart: two filled circles + triangle display.fillCircle(58, 27, 6, WHITE); display.fillCircle(70, 27, 6, WHITE); display.fillTriangle(52, 30, 76, 30, 64, 44, WHITE); // Cute highlight display.drawPixel(59, 24, BLACK); display.drawPixel(60, 24, BLACK); display.drawPixel(59, 25, BLACK); display.setCursor(24, 50); display.println("You are amaizing!"); } // SCREEN 6 — Stock status void screenStockAll() { display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(16, 0); display.println("HIGIBOX STATUS"); display.drawLine(0, 10, 128, 10, WHITE); display.setCursor(0, 16); display.print("Day "); display.drawRect(36, 16, 70, 7, WHITE); display.fillRect(37, 17, map(stockDayPads, 0, 100, 0, 68), 5, WHITE); display.setCursor(108, 16); display.print(stockDayPads); display.print("%"); display.setCursor(0, 30); display.print("Nght"); display.drawRect(36, 30, 70, 7, WHITE); display.fillRect(37, 31, map(stockNightPads, 0, 100, 0, 68), 5, WHITE); display.setCursor(108, 30); display.print(stockNightPads); display.print("%"); display.setCursor(0, 44); display.print("Pnty"); display.drawRect(36, 44, 70, 7, WHITE); display.fillRect(37, 45, map(stockPantyLiner, 0, 100, 0, 68), 5, WHITE); display.setCursor(108, 44); display.print(stockPantyLiner); display.print("%"); }