#include "Menu.h"
#include "dczloco.h"
#include "loco.h"
void Menu::openMenu() {
if (!display)
return;
update = false;
menu_page = MENU_SETTINGS;
sub_page = -1;
selected_item = 0;
showSettings(sub_page);
highlightItem(selected_item);
is_menu = true;
}
bool Menu::isMenu() const {
return is_menu;
}
void Menu::closeMenu() {
if (!display)
return;
if (menu_page > MENU_SETTINGS) {
showLast();
return;
}
clearAll();
update = true;
display->setFont(u8g2_font_crox2hb_tf);//菜单返回低
updateInfo();
if (always_new) {
showListening();
} else
showSelectedLBJ(0);
menu_page = MENU_CLOSED;
sub_page = 0;
is_menu = false;
}
void Menu::handleKey(bool up) {
if (!display)
return;
if (!is_menu)
return;
if (is_msg)
return;
switch (menu_page) {
case MENU_CLOSED:
break;
case MENU_SETTINGS:
if (up)
selected_item--;
else
selected_item++;
if (selected_item < 0) {
sub_page--;
selected_item = 3;
}
if (selected_item > 3) {
sub_page++;
selected_item = 0;
}
if (sub_page > -1) {
sub_page = -1;
/*if (always_new) {
sub_page = -1;//页数
} else {
menu_page = MENU_RX_INFO;
sub_page = -1;
//showInfo((int8_t) sub_page);
break;
}*/
}
if (sub_page < -1)//页数
sub_page = -1;
showSettings(sub_page);
highlightItem(selected_item);
break;
case MENU_ABOUT:
if (up)
sub_page--;
else
sub_page++;
if (sub_page < 1)
sub_page = 1;
if (sub_page > 1)
sub_page = 1;
showAbout(sub_page);
break;
case MENU_Buzzer:
break;
case MENU_OLED:
break;
case MENU_Bzz:
break;
case MENU_LCDA:
break;
}
}
void Menu::showSettings(int16_t page) {
if (!display)
return;
clearAll();
display->setFont(u8g2_font_wqy16_t_gb2312);
display->drawUTF8(96, 16, "系统设置");
display->drawHLine(0, 20, 256);
switch (page) {
case -1: {
items[0] = "蜂鸣器开关";//蜂鸣器
items[1] = "震动开关";//震动
items[2] = "背光灯开关";//背光灯
items[3] = "关于";//关于
for (int i = 0, c = 38; i < 4; ++i, c += 18) {
display->drawUTF8(0, c, items[i].c_str());
}
break;
}
default:
break;
}
}
void Menu::highlightItem(int8_t item) {
display->drawBox(0, 23 + item * 18, 256, 18);
display->setDrawColor(0);
display->drawUTF8(0, 38 + item * 18, items[item].c_str());
display->setDrawColor(1);
display->sendBuffer();
}
void Menu::acknowledge() {
if (!display)
return;
if (is_msg) {
showLast();
return;
}
switch (menu_page) {
case MENU_SETTINGS:
if (sub_page == -1) {
switch (selected_item) {
case 0:
menu_page = MENU_Buzzer;//蜂鸣器
showBuzzer();
selected_item = 0;
highlightItem(selected_item);
break;
case 1:
menu_page = MENU_Bzz;//震动
showBzz();
selected_item = 0;
highlightItem(selected_item);
break;
case 2:
menu_page = MENU_LCDA;//背光灯
showLCDA();
selected_item = 0;
highlightItem(selected_item);
break;
case 3:
menu_page = MENU_ABOUT;//关于
sub_page = 1;
showAbout(1);
break;
default:
break;
}
}
break;
case MENU_Buzzer://蜂鸣器
if (bz_buzzer ) {
prb_count = 0;
prb_timer = 0;
car_count = 0;
car_timer = 0;
bz_buzzer = false;
showBuzzer();
pinMode(beep_pin, OUTPUT);//pinMode(beep_pin, INPUT);
highlightItem(selected_item);
} else {
bz_buzzer = true;
showBuzzer();
pinMode(beep_pin, INPUT);//pinMode(beep_pin, OUTPUT);
highlightItem(selected_item);
}
break;
case MENU_Bzz://震动
if (bz_bzz ) {
prb_count = 0;
prb_timer = 0;
car_count = 0;
car_timer = 0;
bz_bzz = false;
showBzz();
pinMode(BOARD_LED, INPUT);
highlightItem(selected_item);
} else {
bz_bzz = true;
showBzz();
pinMode(BOARD_LED, OUTPUT);
highlightItem(selected_item);
}
break;
case MENU_LCDA://背光灯
if (bz_LCDA ) {
prb_count = 0;
prb_timer = 0;
car_count = 0;
car_timer = 0;
bz_LCDA = false;
showLCDA();
pinMode(LEDA_PIN, INPUT);
highlightItem(selected_item);
} else {
bz_LCDA = true;
showLCDA();
pinMode(LEDA_PIN, OUTPUT);
highlightItem(selected_item);
}
break;
break;
default:
return;
}
}
void Menu::showLast() {
if (is_msg)
is_msg = false;
switch (menu_page) {
case MENU_Buzzer://蜂鸣器
sub_page = -1;//第1页
showSettings(sub_page);
selected_item = 0;//第一项
highlightItem(selected_item);
menu_page = MENU_SETTINGS;
break;
default:
case MENU_Bzz://震动
sub_page = -1;//第1页
showSettings(sub_page);
selected_item = 1;//第2项
highlightItem(selected_item);
menu_page = MENU_SETTINGS;
break;
case MENU_LCDA://背光灯
sub_page = -1;//第1页
showSettings(sub_page);
selected_item = 2;//第3项
highlightItem(selected_item);
menu_page = MENU_SETTINGS;
break;
case MENU_ABOUT://关于
sub_page = -1;//第1页
showSettings(sub_page);
selected_item = 3;//第4项
highlightItem(selected_item);
menu_page = MENU_SETTINGS;
break;
return;
}
}
void Menu::showAbout(int16_t page) {
clearAll();
display->setFont(u8g2_font_wqy16_t_gb2312);
display->drawUTF8(112, 14, "关于");
display->drawHLine(0, 18, 256);
//display->drawUTF8(118, 12, String(page).c_str());
char buffer[32];
if (page == 1) {
}
display->sendBuffer();
}
void Menu::showMessage(const char *title, const char *message) {
is_msg = true;
display->setFont(FONT_12_GB2312);
display->setDrawColor(0);
display->drawBox(12, 4, 104, 58);
display->setDrawColor(1);
display->drawFrame(12, 4, 104, 58);
display->drawUTF8(15, 16, title);
display->drawHLine(14, 18, 100);
pwordUTF8(String(message), 18, 34, 100, 58);
display->sendBuffer();
}
void Menu::updatePage() {
if (!is_menu)
return;
if (millis64() - update_timer < 30)
return;
switch (menu_page) {
case MENU_FREQ:
//showFreq();
highlightItem(selected_item);
break;
case MENU_TF_SETTINGS:
if (sub_page != 1)
return;
//showTFSettings(sub_page);
highlightItem(selected_item);
break;
default:
return;
}
update_timer = millis64();
}
void Menu::showBuzzer(bool send) {
clearAll();
// display->setDrawColor(0);
// display->drawBox(0,0,128,64);
// display->setDrawColor(1);
display->setFont(u8g2_font_wqy16_t_gb2312);
display->drawUTF8(0, 14, "蜂鸣器");
display->drawHLine(0, 18, 256);
items[0] = "蜂鸣器开关 ";
if (bz_buzzer )
items[0] += "[已关闭]";//已开启
else
items[0] += "[已开启]";//已关闭
if (send)
display->sendBuffer();
}
void Menu::showBzz(bool send) {
clearAll();
display->setFont(u8g2_font_wqy16_t_gb2312);
display->drawUTF8(0, 14, "震动");
display->drawHLine(0, 18, 256);
items[0] = "震动开关 ";
if (bz_bzz )
items[0] += "[已开启]";
else
items[0] += "[已关闭]";
if (send)
display->sendBuffer();
}
void Menu::showLCDA(bool send) {
clearAll();
display->setFont(u8g2_font_wqy16_t_gb2312);
display->drawUTF8(0, 14, "背光灯");
display->drawHLine(0, 18, 256);
items[0] = "背光灯 ";
if (bz_LCDA )
items[0] += "[已开启]";
else
items[0] += "[已关闭]";
if (send)
display->sendBuffer();
}
这个一个菜单的代码,但是我想修改一下,添加一个可以修改RTC时间的菜单,已经有RTC初始化的程序了,用的#include <RTClib.h>库,