/** \File TrainUi.hpp * \copyright (c) 2025 len0rd * \date 2025-02-09 * * Menu and LCD UI/rotary encoder for train controller */ #ifndef __TRAINUI_H__ #define __TRAINUI_H__ #include #include #include "AdafruitVfdDisplay.hpp" #include "LcdMenu.h" #include "Serial.h" #include "input/SimpleRotaryAdapter.h" #include "renderer/CharacterDisplayRenderer.h" MENU_SCREEN(mainScreen, mainItems, ITEM_BASIC("Item Eins"), ITEM_BASIC("Item Zwei"), ITEM_BASIC("Item Drei")); #define ROT_ENC_A_PIN PIN_D6 #define ROT_ENC_B_PIN PIN_D7 #define ROT_ENC_BUTTON_PIN PIN_D8 #define DISP_NUM_ROWS 2 #define DISP_NUM_COLS 16 class TrainUi { public: TrainUi() : m_lcdUart{_UART2_}, m_disp(m_lcdUart), m_renderer(&m_disp, DISP_NUM_COLS, DISP_NUM_ROWS), m_menu(m_renderer), m_rotEnc(ROT_ENC_A_PIN, ROT_ENC_B_PIN, ROT_ENC_BUTTON_PIN), m_rotaryInput(&m_menu, &m_rotEnc) {} inline void setup() { m_lcdUart.begin(57600); while (!m_lcdUart) ; // m_disp.show(); // m_disp.clear(); // m_disp.drawBlinker(); m_renderer.begin(); m_menu.setScreen(mainScreen); } inline void loop() { // m_disp.clear(); // // uint8_t clearCmd[] = {0xfe, 0x58, 0xfe, 0x48}; // // m_lcdUart.write_raw(clearCmd, sizeof(clearCmd)); // char toPrint[16] = {}; // snprintf(toPrint, 16, "enc: %d %d", m_rotEnc.rotate(), m_rotEnc.push()); // m_disp.draw(toPrint); // m_lcdUart.print("howdy do"); m_rotaryInput.observe(); } private: UART& m_lcdUart; AdafruitVfdDisplay m_disp; CharacterDisplayRenderer m_renderer; LcdMenu m_menu; SimpleRotary m_rotEnc; SimpleRotaryAdapter m_rotaryInput; }; #endif /* __TRAINUI_H__ */