#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>库,不需要修改秒钟,最好是时间是横着一排通过上下来修改,我的屏幕是256*128的