75 lines
1.8 KiB
C++
75 lines
1.8 KiB
C++
|
/** \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 <Arduino.h>
|
||
|
#include <SimpleRotary.h>
|
||
|
#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__ */
|