-
Notifications
You must be signed in to change notification settings - Fork 0
/
QuickMenu.h
156 lines (130 loc) · 2.75 KB
/
QuickMenu.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//
// QuickMenu Library by @triqadafi
// TQDF is a shorthand of triqadafi
// 2022 (C) www.triqada.fi
//
//
// Big thanks to the source of inspiration:
// https://www.semesin.com/project/2018/04/13/dinamik-menu-dan-submenu-dengan-keypad-dan-lcd-16x2-menggunakan-arduino/
//
#include <Arduino.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#ifndef TQDF_QuickMenu_h
#define TQDF_QuickMenu_h
#define MENULevel_MAX 2
#define LCDString_WIDTH 16+1
#define QuickMenu_Size(type) sizeof(type)/sizeof(type[0])
enum QMMode {
UInt8,
UInt16,
textDropDown,
subMenu,
systemState
};
struct QMDropdown{
char title[LCDString_WIDTH];
};
struct QMenu{
char title[LCDString_WIDTH];
char desc[LCDString_WIDTH];
byte dataType;
void *dataVariable;
uint16_t valueMax;
uint16_t valueMin;
char *menuSub;
byte param_a;
};
struct QMLevel
{
byte index;
QMenu *menu;
byte menuLength;
char *dropDown;
byte dropDownLength;
};
/**
* @brief test coba coba tentang brief
*
* dibawahnya ini harusnya comment
*
*/
class QuickMenu
{
public:
/**
* @brief Construct a new TQDF_QuickMenu object
*
* @param _keypad keypad instance
* @param _lcd_i2c LCD i2c instance
* @param _main_menu main menu variable
*/
QuickMenu(Keypad *_keypad, LiquidCrystal_I2C *_lcd_i2c, QMenu *_main_menu, uint8_t _menu_size, uint8_t _variable_monitor_length = 5);
/**
* @brief Menu idle state
*
*/
void idle();
/**
* @brief Init
*
*/
void begin();
/**
* @brief TODO:
*
*/
void showIdleText(bool opt);
/**
* @brief TODO:
*
*/
void loop();
/**
* @brief Loop
*
*/
bool isMenuActive();
/**
* @brief TODO:
*
*/
void displayMenu();
/**
* @brief TODO:
*
*/
int getState();
/**
* @brief TODO:
*
*/
bool resetState();
bool eventChange(u_int16_t var);
private:
LiquidCrystal_I2C* TQDF_lcd;
Keypad* TQDF_keypad;
QMenu* TQDF_mainMenu;
uint8_t TQDF_mainMenu_size;
QMLevel* MENULevel_now();
QMenu* MENU_now(int index = 0);
QMLevel MENULevel[MENULevel_MAX];
int SYS_State;
bool MENU_Idle_enable = true;
int8_t MENULevel_index = -1;
bool MENU_Display_initial = true;
unsigned long MENU_DisplayRow0_millis;
unsigned long MENU_DisplayRow1_millis;
bool MENU_DisplayRow1_begin = false;
byte MENU_Title_index;
char *MENU_Title_text;
char *MENU_Title_desc;
byte MENU_TitleRotation_index;
bool KEYPAD_isKeyInput;
byte KEYPAD_KeyInput_position;
String KEYPAD_KeyInput_char;
uint8_t VAR_Monitor_index = 0;
unsigned long* VAR_Monitor_temp;
void displayText();
};
#endif