//Graphics and idea from https://www.youtube.com/watch?v=HVHVkKt-ldc https://github.com/upiir/arduino_oled_menu // // This libary is made with vibes and Claude 3.7 sonnet // Cleaned up by Smikkelbakje #include #include #include #include "MenuSystem.h" #include "Graphics.h" U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); MenuSystem menu(&u8g2); bool buttonDown = false; bool buttonRight = false; bool buttonUp = false; // Actions for menu items void action3DCube() { Serial.println("3D Cube selected!"); } void actionBattery() { Serial.println("Battery selected!"); } void actionDashboard() { Serial.println("Dashboard selected!"); } void actionFireworks() { Serial.println("Fireworks selected!"); } void setup() { // Initialize serial communication Serial.begin(9600); Wire.begin(); // Initialize I2C bus Wire.setClock(400000); // Set to 400kHz (standard speed for most displays) // Clear and initialize the display u8g2.begin(); u8g2.clearBuffer(); u8g2.sendBuffer(); // Initialize the menu menu.begin(); // Add menu items menu.addMenuItem("3D Cube", bitmap_icons[0]); menu.addMenuItem("Battery", bitmap_icons[1]); menu.addMenuItem("Dashboard", bitmap_icons[2]); menu.addMenuItem("Fireworks", bitmap_icons[3]); menu.addMenuItem("WEEEEE", bitmap_icons[4]); // Add action callbacks for menu items menu.setItemCallback(0, action3DCube); menu.setItemCallback(1, actionBattery); menu.setItemCallback(2, actionDashboard); menu.setItemCallback(3, actionFireworks); // Clear the display once more u8g2.clearBuffer(); u8g2.sendBuffer(); } void loop() { //Set according to your button setup or use the booleans in another configuration buttonUp = digitalRead(D0); buttonUp = digitalRead(D1); buttonUp = digitalRead(D2); // Update menu button states menu.setButtons(buttonDown, buttonRight, buttonUp); // Update and draw the menu menu.update(); }