From a20e4ef745abe202ee3ce3f4068946116906249b Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Tue, 6 May 2025 16:19:13 +0200 Subject: [PATCH] docs --- .../EasyMenu.zip | Bin 0 -> 4746 bytes .../GUI complete.zip | Bin 0 -> 13686 bytes .../image-12.jpg | Bin 0 -> 75976 bytes .../image-13.jpg | Bin 0 -> 30821 bytes .../interface_application_programming.md | 745 +++++++++++++++++- 5 files changed, 744 insertions(+), 1 deletion(-) create mode 100644 docs/Assignments/week_14_interface_application_programming/EasyMenu.zip create mode 100644 docs/Assignments/week_14_interface_application_programming/GUI complete.zip create mode 100644 docs/Assignments/week_14_interface_application_programming/image-12.jpg create mode 100644 docs/Assignments/week_14_interface_application_programming/image-13.jpg diff --git a/docs/Assignments/week_14_interface_application_programming/EasyMenu.zip b/docs/Assignments/week_14_interface_application_programming/EasyMenu.zip new file mode 100644 index 0000000000000000000000000000000000000000..04629ac912d5633cd093f4adcad68df3ea5432ce GIT binary patch literal 4746 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 literal 0 HcmV?d00001 diff --git a/docs/Assignments/week_14_interface_application_programming/GUI complete.zip b/docs/Assignments/week_14_interface_application_programming/GUI complete.zip new file mode 100644 index 0000000000000000000000000000000000000000..56f60d67e5313d2dceb9bc44a2a0a20e81ae436d GIT binary patch literal 13686 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 literal 0 HcmV?d00001 diff --git a/docs/Assignments/week_14_interface_application_programming/image-12.jpg b/docs/Assignments/week_14_interface_application_programming/image-12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..381262fb954ca9f76c6ae1f86cc9736e4ad397e6 GIT binary patch literal 75976 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 literal 0 HcmV?d00001 diff --git a/docs/Assignments/week_14_interface_application_programming/image-13.jpg b/docs/Assignments/week_14_interface_application_programming/image-13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d534050e06aec918cba7ba0622243279a6febcf0 GIT binary patch literal 30821 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 F{0|WEd368) literal 0 HcmV?d00001 diff --git a/docs/Assignments/week_14_interface_application_programming/interface_application_programming.md b/docs/Assignments/week_14_interface_application_programming/interface_application_programming.md index cab0908..ed18ed5 100644 --- a/docs/Assignments/week_14_interface_application_programming/interface_application_programming.md +++ b/docs/Assignments/week_14_interface_application_programming/interface_application_programming.md @@ -423,5 +423,748 @@ A portion of this code was taken from the machining week group project. But what ``` This is the full code of the screen. The schematic for the pcb can be found in [the final project page](/docs/final_project/final_project.md) +## Turning it into a library +So I asked Copilot (Claude 3.7 Sonnet) to turn this above into a library. Using this prompt "turn the screen thing into a library so i can easily create menus and stuff" and using the context from my files it came up with this broken and oversized mess. +??? Failure.cpp + ```cpp + #ifndef OLED_MENU_H + #define OLED_MENU_H + + #include + #include + + // Maximum number of menu items and item name length + #define MAX_MENU_ITEMS 20 + #define MAX_ITEM_LENGTH 20 + + // Button states + #define BUTTON_RELEASED 0 + #define BUTTON_PRESSED 1 + + class OLEDMenu { + public: + // Constructor + OLEDMenu(U8G2_SSD1306_128X64_NONAME_F_HW_I2C* display); + + // Initialize the menu + void begin(); + + // Set button states + void setButtons(bool up, bool select, bool down); + + // Add a menu item + bool addMenuItem(const char* item_name, const uint8_t* icon = nullptr); + + // Set custom bitmaps for menu items + void setItemBitmap(int item_index, const uint8_t* bitmap); + + // Set custom screen for a menu item + void setItemScreen(int item_index, const uint8_t* screen); + + // Update and draw the menu + void update(); + + // Get currently selected item + int getSelectedItem(); + + // Set selected item + void setSelectedItem(int item); + + // Change to specific screen + void setScreen(int screen_number); + + // Get current screen + int getCurrentScreen(); + + // Set scrollbar visibility + void showScrollbar(bool show); + + // Add custom screen drawing callback + typedef void (*DrawCallback)(U8G2_SSD1306_128X64_NONAME_F_HW_I2C* display, int item_index); + void setCustomScreenCallback(int item_index, DrawCallback callback); + + private: + U8G2_SSD1306_128X64_NONAME_F_HW_I2C* _display; + + // Menu items + char _menu_items[MAX_MENU_ITEMS][MAX_ITEM_LENGTH]; + const uint8_t* _item_icons[MAX_MENU_ITEMS]; + const uint8_t* _item_screens[MAX_MENU_ITEMS]; + DrawCallback _custom_callbacks[MAX_MENU_ITEMS]; + + int _item_count; + int _selected_item; + int _prev_item; + int _next_item; + + // Screen control + int _current_screen; + bool _show_scrollbar; + + // Button states + bool _button_up; + bool _button_select; + bool _button_down; + bool _button_up_clicked; + bool _button_select_clicked; + bool _button_down_clicked; + + // Internal methods + void drawMenuScreen(); + void handleButtonEvents(); + void updateNavigation(); + }; + + #endif // OLED_MENU_H + ``` + +??? Failure.h + ```cpp + #include "OLEDMenu.h" + + // Constructor + OLEDMenu::OLEDMenu(U8G2_SSD1306_128X64_NONAME_F_HW_I2C* display) { + _display = display; + _item_count = 0; + _selected_item = 0; + _current_screen = 0; + _show_scrollbar = true; + + // Initialize button states + _button_up = false; + _button_select = false; + _button_down = false; + _button_up_clicked = false; + _button_select_clicked = false; + _button_down_clicked = false; + + // Initialize arrays + for (int i = 0; i < MAX_MENU_ITEMS; i++) { + _menu_items[i][0] = '\0'; + _item_icons[i] = nullptr; + _item_screens[i] = nullptr; + _custom_callbacks[i] = nullptr; + } + } + + void OLEDMenu::begin() { + updateNavigation(); + } + + void OLEDMenu::setButtons(bool up, bool select, bool down) { + _button_up = up; + _button_select = select; + _button_down = down; + } + + bool OLEDMenu::addMenuItem(const char* item_name, const uint8_t* icon) { + // Check if we have space for another item + if (_item_count >= MAX_MENU_ITEMS) { + return false; + } + + // Copy the item name + strncpy(_menu_items[_item_count], item_name, MAX_ITEM_LENGTH); + _menu_items[_item_count][MAX_ITEM_LENGTH - 1] = '\0'; // Ensure null termination + + // Store the icon + _item_icons[_item_count] = icon; + + // Increment the item count + _item_count++; + + // Update navigation + updateNavigation(); + + return true; + } + + void OLEDMenu::setItemBitmap(int item_index, const uint8_t* bitmap) { + if (item_index >= 0 && item_index < _item_count) { + _item_icons[item_index] = bitmap; + } + } + + void OLEDMenu::setItemScreen(int item_index, const uint8_t* screen) { + if (item_index >= 0 && item_index < _item_count) { + _item_screens[item_index] = screen; + } + } + + void OLEDMenu::setCustomScreenCallback(int item_index, DrawCallback callback) { + if (item_index >= 0 && item_index < _item_count) { + _custom_callbacks[item_index] = callback; + } + } + + void OLEDMenu::update() { + // Handle button events + handleButtonEvents(); + + // Draw the appropriate screen + _display->firstPage(); + do { + if (_current_screen == 0) { + // Draw the menu screen + drawMenuScreen(); + } else if (_current_screen == 1 && _item_screens[_selected_item] != nullptr) { + // Draw item screen + _display->drawBitmap(0, 0, 128/8, 64, _item_screens[_selected_item]); + } else if (_current_screen == 2 && _custom_callbacks[_selected_item] != nullptr) { + // Draw custom screen using callback + _custom_callbacks[_selected_item](_display, _selected_item); + } + } while (_display->nextPage()); + } + + int OLEDMenu::getSelectedItem() { + return _selected_item; + } + + void OLEDMenu::setSelectedItem(int item) { + if (item >= 0 && item < _item_count) { + _selected_item = item; + updateNavigation(); + } + } + + void OLEDMenu::setScreen(int screen_number) { + _current_screen = screen_number; + } + + int OLEDMenu::getCurrentScreen() { + return _current_screen; + } + + void OLEDMenu::showScrollbar(bool show) { + _show_scrollbar = show; + } + + void OLEDMenu::drawMenuScreen() { + // Draw menu background elements + // You might want to add the bitmap_item_sel_outline here + + // Draw previous item + _display->setFont(u8g_font_7x14); + _display->drawStr(25, 15, _menu_items[_prev_item]); + if (_item_icons[_prev_item] != nullptr) { + _display->drawBitmap(4, 2, 16/8, 16, _item_icons[_prev_item]); + } + + // Draw selected item + _display->setFont(u8g_font_7x14B); + _display->drawStr(25, 15+20+2, _menu_items[_selected_item]); + if (_item_icons[_selected_item] != nullptr) { + _display->drawBitmap(4, 24, 16/8, 16, _item_icons[_selected_item]); + } + + // Draw next item + _display->setFont(u8g_font_7x14); + _display->drawStr(25, 15+20+20+2+2, _menu_items[_next_item]); + if (_item_icons[_next_item] != nullptr) { + _display->drawBitmap(4, 46, 16/8, 16, _item_icons[_next_item]); + } + + // Draw scrollbar if enabled + if (_show_scrollbar && _item_count > 1) { + // Draw scrollbar background + // You might want to add bitmap_scrollbar_background here + + // Draw scrollbar handle + _display->drawBox(125, 64/_item_count * _selected_item, 3, 64/_item_count); + } + } + + void OLEDMenu::handleButtonEvents() { + if (_current_screen == 0) { + // Handle up button for menu navigation + if (_button_up && !_button_up_clicked) { + _selected_item = _selected_item - 1; + _button_up_clicked = true; + if (_selected_item < 0) { + _selected_item = _item_count - 1; + } + updateNavigation(); + } else if (!_button_up && _button_up_clicked) { + _button_up_clicked = false; + } + + // Handle down button for menu navigation + if (_button_down && !_button_down_clicked) { + _selected_item = _selected_item + 1; + _button_down_clicked = true; + if (_selected_item >= _item_count) { + _selected_item = 0; + } + updateNavigation(); + } else if (!_button_down && _button_down_clicked) { + _button_down_clicked = false; + } + } + + // Handle select button for screen switching + if (_button_select && !_button_select_clicked) { + _button_select_clicked = true; + + // Cycle through screens + _current_screen = (_current_screen + 1) % 3; + + // Skip screens that don't have content + if (_current_screen == 1 && _item_screens[_selected_item] == nullptr) { + _current_screen = 2; + } + if (_current_screen == 2 && _custom_callbacks[_selected_item] == nullptr) { + _current_screen = 0; + } + } else if (!_button_select && _button_select_clicked) { + _button_select_clicked = false; + } + } + + void OLEDMenu::updateNavigation() { + // Update previous and next item indices + _prev_item = _selected_item - 1; + if (_prev_item < 0) _prev_item = _item_count - 1; + + _next_item = _selected_item + 1; + if (_next_item >= _item_count) _next_item = 0; + } + ``` +Then I asked it to rewrite it and make it simpler and to add in a way to call functions using these menu tabs and to use the original graphics. + +Then it came up with this +??? AI generated.cpp + ```cpp + #include "MenuSystem.h" + #include "MenuGraphics.h" + + MenuSystem::MenuSystem(U8G2_SSD1306_128X64_NONAME_F_HW_I2C* display) { + _display = display; + _itemCount = 0; + _selectedItem = 0; + _screen = 0; + + _btnUp = false; + _btnSelect = false; + _btnDown = false; + _prevBtnUp = false; + _prevBtnSelect = false; + _prevBtnDown = false; + + // Initialize arrays + for (int i = 0; i < MAX_ITEMS; i++) { + _itemNames[i][0] = '\0'; + _itemIcons[i] = nullptr; + _itemScreens[i] = nullptr; + _itemCallbacks[i] = nullptr; + } + } + + void MenuSystem::begin() { + // Ensure display is properly initialized + _display->begin(); + _display->clearBuffer(); + _display->sendBuffer(); + delay(100); // Short delay to ensure display is ready + } + + void MenuSystem::addMenuItem(const char* name, const uint8_t* icon) { + if (_itemCount < MAX_ITEMS) { + strncpy(_itemNames[_itemCount], name, MAX_NAME_LEN-1); + _itemNames[_itemCount][MAX_NAME_LEN-1] = '\0'; // Ensure null termination + _itemIcons[_itemCount] = icon; + _itemCount++; + } + } + + void MenuSystem::setItemScreen(int index, const uint8_t* screen) { + if (index >= 0 && index < _itemCount) { + _itemScreens[index] = screen; + } + } + + void MenuSystem::setItemCallback(int index, void (*callback)()) { + if (index >= 0 && index < _itemCount) { + _itemCallbacks[index] = callback; + } + } + + void MenuSystem::setButtons(bool up, bool select, bool down) { + // Save previous button states + _prevBtnUp = _btnUp; + _prevBtnSelect = _btnSelect; + _prevBtnDown = _btnDown; + + // Set new button states + _btnUp = up; + _btnSelect = select; + _btnDown = down; + } + + void MenuSystem::update() { + // Process button inputs before drawing + handleButtons(); + + // Simple drawing approach (not using page buffer mode) + _display->clearBuffer(); + + if (_screen == 0) { + // Draw the main menu screen + drawMenu(); + } else if (_screen == 1 && _itemScreens[_selectedItem] != nullptr) { + // Draw the full-screen bitmap for the selected item + _display->drawXBM(0, 0, 128, 64, _itemScreens[_selectedItem]); + } + + _display->sendBuffer(); + } + + void MenuSystem::drawMenu() { + if (_itemCount == 0) return; // Nothing to draw + + // Calculate which items to show (previous, current, next) + int prevItem = (_selectedItem > 0) ? _selectedItem - 1 : _itemCount - 1; + int nextItem = (_selectedItem < _itemCount - 1) ? _selectedItem + 1 : 0; + + // Draw the background with the item selector outline (if enabled) + // _display->drawXBM(0, 0, 128, 64, bitmap_item_sel_outline); + + // Instead, draw a simple selection highlight + _display->drawFrame(0, 20, 128, 24); // Highlight the middle selection + + // Draw previous item (top position) + _display->setFont(u8g2_font_6x10_tf); // Use a different, simpler font + _display->drawStr(25, 15, _itemNames[prevItem]); + if (_itemIcons[prevItem] != nullptr) { + _display->drawXBM(4, 2, 16, 16, _itemIcons[prevItem]); + } + + // Draw selected item (middle position) + _display->setFont(u8g2_font_6x10_tf); // Use same font for consistency + _display->drawStr(25, 35, _itemNames[_selectedItem]); + if (_itemIcons[_selectedItem] != nullptr) { + _display->drawXBM(4, 24, 16, 16, _itemIcons[_selectedItem]); + } + + // Draw next item (bottom position) + _display->setFont(u8g2_font_6x10_tf); // Use same font for consistency + _display->drawStr(25, 55, _itemNames[nextItem]); + if (_itemIcons[nextItem] != nullptr) { + _display->drawXBM(4, 46, 16, 16, _itemIcons[nextItem]); + } + + // Draw a simple scrollbar instead of using bitmap + if (_itemCount > 1) { + _display->drawVLine(125, 0, 64); // Scrollbar background + int barHeight = 64 / _itemCount; + int barY = (_selectedItem * 64) / _itemCount; + _display->drawBox(123, barY, 4, barHeight); // Scrollbar handle + } + } + + void MenuSystem::handleButtons() { + // Only respond to button press events (not holds) + // Button rising edge detection for up + if (_btnUp && !_prevBtnUp) { + _selectedItem = (_selectedItem > 0) ? _selectedItem - 1 : _itemCount - 1; + Serial.print("Selected item: "); + Serial.println(_selectedItem); + } + + // Button rising edge detection for down + if (_btnDown && !_prevBtnDown) { + _selectedItem = (_selectedItem < _itemCount - 1) ? _selectedItem + 1 : 0; + Serial.print("Selected item: "); + Serial.println(_selectedItem); + } + + // Button rising edge detection for select + if (_btnSelect && !_prevBtnSelect) { + // Execute callback if it exists + if (_itemCallbacks[_selectedItem] != nullptr) { + _itemCallbacks[_selectedItem](); + } + + // Toggle between menu and item screen if screen exists + if (_itemScreens[_selectedItem] != nullptr) { + _screen = (_screen == 0) ? 1 : 0; + Serial.print("Screen changed to: "); + Serial.println(_screen); + } + } + } + ``` + + +??? AI generated.h + ```cpp + #ifndef MENU_SYSTEM_H + #define MENU_SYSTEM_H + + #include + #include + + class MenuSystem { + public: + // Constructor + MenuSystem(U8G2_SSD1306_128X64_NONAME_F_HW_I2C* display); + + // Initialize menu + void begin(); + + // Add menu item with icon + void addMenuItem(const char* name, const uint8_t* icon); + + // Set callback function for item + void setItemCallback(int index, void (*callback)()); + + // Set button states + void setButtons(bool up, bool select, bool down); + + // Update and draw menu + void update(); + + private: + U8G2_SSD1306_128X64_NONAME_F_HW_I2C* _display; + + // Menu items + static const int MAX_ITEMS = 10; + static const int MAX_NAME_LEN = 20; + char _itemNames[MAX_ITEMS][MAX_NAME_LEN]; + const uint8_t* _itemIcons[MAX_ITEMS]; + const uint8_t* _itemScreens[MAX_ITEMS]; + void (*_itemCallbacks[MAX_ITEMS])(); + + // Menu state + int _itemCount; + int _selectedItem; + int _screen; // 0 = menu, 1 = item screen + + // Button handling + bool _btnUp; + bool _btnSelect; + bool _btnDown; + bool _prevBtnUp; + bool _prevBtnSelect; + bool _prevBtnDown; + + // Draw the menu + void drawMenu(); + + // Update button states + void handleButtons(); + }; + + #endif + ``` +Which worked really well with my code + +??? My code + ```cpp + #include + #include + #include + #include "MenuSystem.h" + #include "Graphics.h" + U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); + MenuSystem menu(&u8g2); + + //=====================================================================================// + // Struct declarations + typedef struct struct_message + { + int PWMCH1; + int PWMCH2; + int PWMCH3; + int PWMCH4; + } struct_message; + struct_message JoystickData; // declare the struct as JoystickData + + struct hardJoystickValues + { + int LXU; // Left joystick X axis up + int LXD; // Left joystick X axis down + int RXU; // Right joystick X axis up + int RXD; // Right joystick X axis down + }; + hardJoystickValues JoystickDataHard; // declare the struct as JoystickDataHard + + //=====================================================================================// + //declarations + void MUXSetup(); + hardJoystickValues GUIParser(); + int analogReadMultiPlexer(int addressA, int addressB, int addressC, int addressD, int pin); + int mapPot(int normalizedValue); + + // Controller declarations + const int MAXPWMVALUE = 1000; + const int MINPWMVALUE = 2000; + + bool buttonRight; + bool buttonLeft; + + // Actions for menu items + void action3DCube() { + Serial.println("3D Cube selected!"); + // Your 3D cube function code here + } + + void actionBattery() { + Serial.println("Battery selected!"); + // Your battery function code here + } + + void actionDashboard() { + Serial.println("Dashboard selected!"); + // Your dashboard function code here + } + + void actionFireworks() { + Serial.println("Fireworks selected!"); + // Your fireworks function code here + } + + void setup() { + Serial.begin(9600); + delay(100); // Small delay to stabilize + + Wire.begin(); // Initialize I2C bus + Wire.setClock(400000); // Set to 400kHz (standard speed for most displays) + + u8g2.begin(); + u8g2.clearBuffer(); + u8g2.sendBuffer(); + + MUXSetup(); // Setup the multiplexer + + // 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(); + + Serial.println("Menu system initialized"); + } + + void loop() { + // Read joystick and button inputs + JoystickData.PWMCH1 = mapPot(analogReadMultiPlexer(0, 0, 0, 0, A0)); //Right joystick Y + JoystickData.PWMCH2 = mapPot(analogReadMultiPlexer(1, 0, 0, 0, A0)); // Right joystick X + JoystickData.PWMCH3 = mapPot(analogReadMultiPlexer(0, 0, 0, 1, A0)); // left joystick Y + JoystickData.PWMCH4 = mapPot(analogReadMultiPlexer(1, 0, 0, 1, A0)); // left joystick X + buttonRight = analogReadMultiPlexer(0, 0, 1, 0, A0) > 2000; // right button + buttonLeft = analogReadMultiPlexer(1, 0, 1, 0, A0) > 2000; // left button + + // Parse joystick data + JoystickDataHard = GUIParser(); + + // Update menu button states + menu.setButtons(JoystickDataHard.LXD, buttonRight, JoystickDataHard.LXU); + + // Update and draw the menu + menu.update(); + + // Small delay to debounce buttons + delay(50); + } + + void MUXSetup() + { + pinMode(D3, OUTPUT); // MUX enable + pinMode(D6, OUTPUT); // MUX address A + pinMode(D7, OUTPUT); // MUX address B + pinMode(D9, OUTPUT); // MUX address C + pinMode(D8, OUTPUT); // MUX address D + pinMode(A0, INPUT); // MUX input + } + + // Function to parse joystick data to hard values + hardJoystickValues GUIParser(){ + // Define joystick offsets (calibrated resting values) + const int offsetPWMCH1 = 1090; // Resting value for PWMCH1 (right joystick Y-axis) + const int offsetPWMCH2 = 1072; // Resting value for PWMCH2 (right joystick X-axis) + const int offsetPWMCH3 = 1043; // Resting value for PWMCH3 (left joystick X-axis) + const int offsetPWMCH4 = 1476; // Resting value for PWMCH4 (left joystick Y-axis) + + // Define deadzone threshold + const int deadzone = 120; + + // Adjust joystick values by subtracting offsets + int adjustedPWMCH1 = JoystickData.PWMCH1 - offsetPWMCH1; + int adjustedPWMCH2 = JoystickData.PWMCH2 - offsetPWMCH2; + int adjustedPWMCH3 = JoystickData.PWMCH3 - offsetPWMCH3; + int adjustedPWMCH4 = JoystickData.PWMCH4 - offsetPWMCH4; + + // Apply deadzone + if (abs(adjustedPWMCH1) < deadzone) adjustedPWMCH1 = 0; //abs to avoid negatives + if (abs(adjustedPWMCH2) < deadzone) adjustedPWMCH2 = 0; + if (abs(adjustedPWMCH3) < deadzone) adjustedPWMCH3 = 0; + if (abs(adjustedPWMCH4) < deadzone) adjustedPWMCH4 = 0; + + // Map joystick values to hard values + int LXU = 0; // Left joystick X axis up + int LXD = 0; // Left joystick X axis down + if (adjustedPWMCH1 > 0) { + LXU = 1; // Joystick is up + } else if (adjustedPWMCH1 < 0) { + LXD = 1; // Joystick is down + } + + return {LXU, LXD, 0, 0}; // Return the values as a struct + } + + int analogReadMultiPlexer(int addressA, int addressB, int addressC, int addressD, int pin) + { + digitalWrite(D3, LOW); + digitalWrite(D6, addressA); + digitalWrite(D7, addressB); + digitalWrite(D9, addressC); + digitalWrite(D8, addressD); + return analogRead(pin); + } + + int mapPot(int normalizedValue) + { + return map(normalizedValue, 400, 2500, MINPWMVALUE, MAXPWMVALUE); // map the normalized value to the PWM range + } + ``` + +Now I will turn this into a proper library and clean up what the AI made because there are still some things I want different. I first started off removing all of my code and reducing it down to just what's needed to run the screen with the library. Then I replaced all variables with generic ones instead of using my structs and bringing confusion +```cpp + // Update menu button states + menu.setButtons(buttonDown, buttonRight, buttonUp); +``` +Instead of +```cpp +menu.setButtons(JoystickDataHard.LXD, buttonRight, JoystickDataHard.LXU); +``` + +I also removed all unused graphics from the file reducing it down to 65 lines instead of 1165 lines. Then I added some documentation to everything using DoxyGen. +![alt text](image-12.jpg) +Doxygen makes it so you can hover functions and see what they do and what all parameters are. + +![alt text](image-13.jpg) + + + + + # Files -* [Files test using joysticks](GUI%20Test.zip) \ No newline at end of file +* [Files test using joysticks](GUI%20Test.zip) +* [Last files](GUI%20complete.zip) +* [*Library* Only](EasyMenu.zip) \ No newline at end of file