Witam. Napisałem program do ESP32 obsługujący wyświetlacz 128x64 oraz menu z wieloma poziomami zagnieżdżenia z możliwością swobodnego poruszania się po całym menu. zmienna "menu" określa poziom zagnieżdżenia, tablica "cursor[]" określa pozycję kursora dla każdego poziomu zagnieżdżenia, a tablica "site[]", określa stronę dla każdego zagnieżdżenia (gdy zabraknie miejsca dla kursora, to zmienia się strona). Wszystko dobrze działa, ale zastanawiam się w jaki sposób można to zrobić, żeby było bardziej czytelne. Chcę żeby z łatwością dało się zidentyfikować w programie, która pozycja w switch to które menu i uniknąć takiego zagnieżdżonego "switch" jeśli się da.
switch (menu) {
default:
if (menu == (-1)) {
max_cursor = 1;
max_site = 0;
menu = menu + buttons[0] + buttons[4];
switch (cursor[0]) {
case 0:
light_power[0] = light_power[0] + buttons[7] - buttons[1] + encoder_out_func();
break;
case 1:
light_power[1] = light_power[1] + buttons[7] - buttons[1] + encoder_out_func();
break;
default:
break;
}
} else {
if (buttons_long[1]) {
EEPROM_update();
}
menu = menu - buttons[4] + buttons[6];
}
//---------------------------------------------------
if (temperature[3] >= 10) {
lcd.setCursor(80, 12);
} else {
lcd.setCursor(85, 12);
}
lcd.print(temperature[3], 1);
lcd.print(" ");
lcd.drawFrame(104, 13, 3, 3);
lcd.print("C");
//---------------------------------------------------
if (battery >= 100) {
lcd.setCursor(105, 0);
} else {
if (battery >= 10) {
lcd.setCursor(108, 0);
} else {
lcd.setCursor(111, 0);
}
}
lcd.setFont(u8g2_font_5x8_tf);
lcd.print(battery, 0);
lcd.print("%");
lcd.drawFrame(104, 0, 24, 8);
lcd.drawBox(102, 2, 2, 4);
lcd.setDrawColor(2);
lcd.drawBox(105, 1, battery * 0.23, 6);
lcd.setDrawColor(1);
//------------------------------------------------
lcd.setFont(u8g2_font_10x20_tf);
lcd.setCursor(2, 3);
if (vel < 100) {
if (vel < 10) {
lcd.print(vel, 2);
} else {
lcd.print(vel, 1);
}
} else {
lcd.print(vel, 0);
}
lcd.setFont(u8g2_font_5x7_tf);
lcd.drawStr(43, 2, "km");
lcd.drawHLine(44, 10, 7);
lcd.drawStr(46, 11, "h");
lcd.drawVLine(53, 0, 20);
lcd.drawHLine(0, 19, 53);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_mr);
if ((light_power[1] + 1) * 0.39216 < 10) {
lcd.setCursor(103, 40);
} else {
if ((light_power[1] + 1) * 0.39216 < 100) {
lcd.setCursor(101, 40);
} else {
lcd.setCursor(99, 40);
}
}
lcd.setDrawColor(2);
if (menu == (-1) && cursor[0] == 1) {
lcd.print(light_power[1] * 0.39216, 0);
lcd.print("%");
lcd.drawBox(98, 41, 17, 5);
} else {
lcd.print(light_power_out[1] * 0.39216, 0);
lcd.print("%");
}
lcd.setDrawColor(1);
if (temperature[1] >= 10 || temperature[1] < 0) {
lcd.setCursor(99, 46);
} else {
lcd.setCursor(101, 46);
}
lcd.print(temperature[1], 0);
lcd.print(" C");
if (temperature[1] >= 10 || temperature[1] < 0) {
lcd.drawBox(108, 47, 2, 2);
} else {
lcd.drawBox(106, 47, 2, 2);
}
lcd.drawFrame(115, 40, 14, 13);
lcd.drawFrame(97, 40, 19, 13);
if (light_on[1]) {
lcd.setDrawColor(1);
} else {
lcd.setDrawColor(0);
}
lcd.drawXBMP(116, 41, 12, 11, bitmap_long_light);
lcd.setDrawColor(1);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_mr);
if ((light_power[0] + 1) * 0.39216 < 10) {
lcd.setCursor(103, 28);
} else {
if ((light_power[0] + 1) * 0.39216 < 100) {
lcd.setCursor(101, 28);
} else {
lcd.setCursor(99, 28);
}
}
lcd.setDrawColor(2);
if (menu == (-1) && cursor[0] == 0) {
lcd.print(light_power[0] * 0.39216, 0);
lcd.print("%");
lcd.drawBox(98, 29, 17, 5);
} else {
lcd.print(light_power_out[0] * 0.39216, 0);
lcd.print("%");
}
lcd.setDrawColor(1);
if (temperature[0] >= 10 || temperature[0] < 0) {
lcd.setCursor(99, 34);
} else {
lcd.setCursor(101, 34);
}
lcd.print(temperature[0], 0);
lcd.print(" C");
if (temperature[0] >= 10 || temperature[0] < 0) {
lcd.drawBox(108, 35, 2, 2);
} else {
lcd.drawBox(106, 35, 2, 2);
}
lcd.drawFrame(115, 28, 14, 13);
lcd.drawFrame(97, 28, 19, 13);
if (light_on[0]) {
lcd.setDrawColor(1);
} else {
lcd.setDrawColor(0);
}
lcd.drawXBMP(116, 29, 12, 11, bitmap_short_light);
lcd.setDrawColor(1);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_mr);
if (temperature[2] >= 10 || temperature[2] < 0) {
lcd.setCursor(99, 55);
} else {
lcd.setCursor(101, 55);
}
lcd.print(temperature[2], 0);
lcd.print(" C");
if (temperature[2] >= 10 || temperature[2] < 0) {
lcd.drawBox(108, 56, 2, 2);
} else {
lcd.drawBox(106, 56, 2, 2);
}
lcd.drawFrame(115, 52, 14, 13);
lcd.drawFrame(97, 52, 19, 13);
lcd.drawXBMP(116, 53, 12, 11, bitmap_mosfet);
lcd.setDrawColor(1);
//------------------------------------------------
lcd.setFont(u8g2_font_unifont_t_symbols);
lcd.drawUTF8(61, -3, "▴");
lcd.setFont(u8g2_font_5x7_tf);
lcd.setCursor(55, 1);
lcd.print(shift[0]);
lcd.drawFrame(53, 0, 8, 10);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_tr);
lcd.setCursor(1, 20);
lcd.print("-5");
lcd.setCursor(45, 20);
lcd.print("+5");
lcd.setCursor(55, 20);
if (vel_dif >= 0) {
lcd.print("+");
}
if (vel_dif < 10) {
lcd.print(vel_dif, 1);
} else {
lcd.print(vel_dif, 0);
}
lcd.drawFrame(53, 19, 19, 9);
if (vel_dif < 0) {
for (int i = 20; i >= 20 + constrain(vel_dif * 4, -20, 0); i--) {
lcd.drawVLine(1.3333 * i, 21, 5);
}
} else {
for (int i = 20; i < 20 + constrain(vel_dif * 4, 0, 20); i++) {
lcd.drawVLine(1.3333 * i, 21, 5);
}
}
lcd.drawFrame(-1, 19, 55, 9);
//------------------------------------------------
lcd.drawBox(0, 28, 13, 6);
lcd.setCursor(1, 28);
lcd.setDrawColor(0);
lcd.print("AVG");
lcd.setDrawColor(1);
lcd.setCursor(14, 28);
if (vel_avg[0] > 10) {
lcd.print(vel_avg[0], 1);
} else {
lcd.print(vel_avg[0], 2);
}
lcd.drawVLine(30, 28, 7);
lcd.setCursor(32, 28);
if (vel_avg[1] > 10) {
lcd.print(vel_avg[1], 1);
} else {
lcd.print(vel_avg[1], 2);
}
lcd.drawVLine(48, 28, 7);
lcd.setCursor(50, 28);
lcd.print("kmh");
lcd.drawVLine(62, 28, 7);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_tr);
lcd.drawBox(0, 34, 13, 6);
lcd.setDrawColor(0);
lcd.setCursor(1, 34);
lcd.print("MAX");
lcd.setDrawColor(1);
lcd.setCursor(14, 34);
if (vel_max[0] > 10) {
if (vel_max[0] > 100) {
lcd.setCursor(16, 34);
lcd.print(vel_max[0], 0);
} else {
lcd.print(vel_max[0], 1);
}
} else {
lcd.print(vel_max[0], 2);
}
lcd.drawVLine(30, 34, 7);
lcd.setCursor(32, 34);
if (vel_max[1] > 10) {
if (vel_max[1] > 100) {
lcd.setCursor(34, 34);
lcd.print(vel_max[1], 0);
} else {
lcd.print(vel_max[1], 1);
}
} else {
lcd.print(vel_max[1], 2);
}
lcd.drawVLine(48, 34, 7);
lcd.setCursor(50, 34);
lcd.print("kmh");
lcd.drawVLine(62, 34, 7);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_tr);
lcd.drawBox(0, 40, 13, 6);
lcd.setDrawColor(0);
lcd.setCursor(1, 40);
lcd.print("RPM");
lcd.setDrawColor(1);
lcd.setCursor(14, 40);
if (rpm[0] >= 10) {
if (rpm[0] >= 100) {
if (rpm[0] >= 1000) {
lcd.setCursor(14, 40);
lcd.print(rpm[0], 0);
} else {
lcd.setCursor(16, 40);
lcd.print(rpm[0], 0);
}
} else {
lcd.print(rpm[0], 1);
}
} else {
lcd.print(rpm[0], 2);
}
lcd.drawVLine(30, 40, 7);
lcd.drawVLine(48, 40, 7);
lcd.setCursor(50, 40);
lcd.print("rpm");
lcd.drawVLine(62, 40, 7);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_tr);
lcd.drawBox(0, 46, 13, 6);
lcd.setDrawColor(0);
lcd.setCursor(1, 46);
lcd.print("PWR");
lcd.setDrawColor(1);
lcd.setCursor(14, 46);
if (power >= 10) {
if (power >= 100) {
if (power >= 1000) {
} else {
lcd.setCursor(16, 46);
}
lcd.print(power, 0);
} else {
lcd.print(power, 1);
}
} else {
lcd.print(power, 2);
}
lcd.drawVLine(30, 46, 7);
lcd.drawVLine(48, 46, 7);
lcd.setCursor(54, 46);
lcd.print("W");
lcd.drawVLine(62, 46, 7);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_tr);
lcd.drawBox(0, 52, 13, 6);
lcd.setDrawColor(0);
lcd.setCursor(1, 52);
lcd.print("DST");
lcd.setDrawColor(1);
if (dst >= 1000) {
if (dst >= 10000) {
if (dst >= 100000) {
if (dst >= 1000000) {
if (dst >= 1000000) {
lcd.setCursor(14, 52);
lcd.print(dst * 0.00001, 1);
lcd.setCursor(52, 52);
lcd.print("km");
} else {
lcd.setCursor(14, 52);
lcd.print(dst * 0.00001, 2);
lcd.setCursor(52, 52);
lcd.print("km");
}
} else {
lcd.setCursor(14, 52);
lcd.print(dst * 0.01, 0);
lcd.setCursor(54, 52);
lcd.print("m");
}
} else {
lcd.setCursor(16, 52);
lcd.print(dst * 0.01, 0);
lcd.setCursor(54, 52);
lcd.print("m");
}
} else {
lcd.setCursor(18, 52);
lcd.print(dst * 0.01, 0);
lcd.setCursor(54, 52);
lcd.print("m");
}
} else {
lcd.setCursor(20, 52);
lcd.print(dst * 0.01, 0);
lcd.setCursor(54, 52);
lcd.print("m");
}
lcd.drawVLine(30, 52, 7);
lcd.drawVLine(48, 52, 7);
lcd.drawVLine(62, 52, 7);
//------------------------------------------------
lcd.setFont(u8g2_font_micro_tr);
lcd.drawBox(0, 58, 13, 6);
lcd.setDrawColor(0);
lcd.setCursor(3, 58);
lcd.print("TM");
lcd.setDrawColor(1);
lcd.drawVLine(48, 58, 7);
lcd.setCursor(14, 58);
if (travel_time / 3600000 < 10) {
lcd.print("0");
}
lcd.print(travel_time / 3600000);
lcd.print(":");
if ((travel_time % 3600000) / 60000 < 10) {
lcd.print("0");
}
lcd.print((travel_time % 3600000) / 60000);
lcd.print(":");
if ((travel_time % 60000) / 1000 < 10) {
lcd.print("0");
}
if (travel_time > 0) {
lcd.print((travel_time % 60000) / 1000);
} else {
lcd.print("0");
}
lcd.drawVLine(62, 58, 7);
//------------------------------------------------
lcd.setFont(u8g2_font_6x10_tf);
break;
case 1:
max_site = 0;
switch (site[1]) {
case 0:
max_cursor = 2;
menu = menu + buttons[4]; //Sterowanie
buttons[4] = 0;
disp_cursor_color(0, -1);
lcd.drawStr(0, pos_y, "Settings");
disp_cursor_color(1, -1);
lcd.drawStr(0, pos_y, "Stats");
disp_cursor_color(2, -1);
lcd.drawStr(0, pos_y, "Charts");
break;
default:
break;
}
break;
case 2:
switch (site[1]) {
case 0:
switch (cursor[1]) {
case 0:
max_site = 0;
switch (site[2]) {
case 0:
max_cursor = 5;
menu = menu + buttons[4]; //Sterowanie
buttons[4] = 0;
disp_cursor_color(0, -1);
lcd.drawStr(0, pos_y, "LCD");
disp_cursor_color(1, -1);
lcd.drawStr(0, pos_y, "Light");
disp_cursor_color(2, -1);
lcd.drawStr(0, pos_y, "Supply");
disp_cursor_color(3, -1);
lcd.drawStr(0, pos_y, "EEPROM");
disp_cursor_color(4, -1);
lcd.drawStr(0, pos_y, "Parameters");
disp_cursor_color(5, -1);
lcd.drawStr(0, pos_y, "TEST");
break;
default:
break;
}
break;
case 2:
max_site = 0;
switch (site[2]) {
case 0:
max_cursor = 0;
for (int i = 0; i < chart_i; i++) {
max_vel = max(uint8_t(ceil(max_vel)), vel_chart[i]);
}
max_vel = 5 * ceil(max_vel / 5);
lcd.drawStr(58, 0, "Vel");
lcd.drawHLine(0, 9, 127);
lcd.drawFrame(16, 9, 112, 47);
lcd.setFont(u8g2_font_5x8_tf);
lcd.setCursor(0, 9);
lcd.print(max_vel, 0);
lcd.setCursor(0, 17);
lcd.print("kmh");
lcd.setCursor(14, 56);
lcd.print("0");
lcd.setCursor(107, 56);
lcd.print(float(travel_time) * 0.001, 1);
lcd.setFont(u8g2_font_6x10_tf);
for (int i = 1; i < chart_i + 1; i++) {
lcd.drawLine(uint8_t(17 + i * 111 / chart_i - 111 / chart_i), 55 - vel_chart[i - 1] * 47 / max_vel, uint8_t(17 + i * 111 / chart_i), 55 - vel_chart[i] * 47 / max_vel);
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
case 3:
switch (site[1]) {
case 0:
switch (cursor[1]) {
case 0:
switch (site[2]) {
case 0:
switch (cursor[2]) {
case 0:
max_site = 0;
switch (site[3]) {
case 0:
max_cursor = 2;
switch (cursor[3]) { //Sterowanie
case 0:
lcd_backlight = lcd_backlight + buttons[7] - buttons[1] + encoder_out_func();
break;
case 1:
if (buttons[7] || buttons[1] || encoder_out_func()) { lcd_auto_backlight = !lcd_auto_backlight; };
break;
case 2:
lcd_contrast = lcd_contrast + buttons[7] - buttons[1] + encoder_out_func();
break;
default:
break;
}
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "Backlight");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "Auto backlight");
disp_cursor_color(2, 0);
lcd.drawStr(0, pos_y, "Contrast");
lcd.setDrawColor(1);
lcd.setCursor(93, 0);
lcd.print(lcd_backlight);
lcd.setCursor(93, 9);
lcd.print(lcd_auto_backlight);
lcd.setCursor(93, 18);
lcd.print(lcd_contrast);
lcd.setContrast(lcd_contrast);
analogWrite(LCD_BACKLIGHT_PIN, lcd_backlight);
break;
default:
break;
}
break;
case 1:
max_site = 0;
switch (site[3]) {
case 0:
max_cursor = 1;
switch (cursor[3]) { //Sterowanie
case 0:
light_power[1] = light_power[1] + buttons[7] - buttons[1] + encoder_out_func();
break;
case 1:
light_power[0] = light_power[0] + buttons[7] - buttons[1] + encoder_out_func();
break;
default:
break;
}
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "long light");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "short light");
lcd.setDrawColor(1);
lcd.setCursor(93, 0);
lcd.print(light_power[1]);
lcd.setCursor(93, 9);
lcd.print(light_power[0]);
break;
default:
break;
}
break;
case 2:
max_site = 0;
switch (site[3]) {
case 0:
max_cursor = 2;
menu = menu + buttons[4]; //Sterowanie
buttons[4] = 0;
if (cursor[menu] == 0) {
cursor[menu] = 1;
};
lcd.setCursor(0, 1);
lcd.print(voltage[0]);
lcd.print(" ");
lcd.print(voltage[1]);
lcd.print(" ");
lcd.print(voltage[2]);
lcd.print(" ");
lcd.print(voltage[3]);
lcd.print(" V");
lcd.drawHLine(0, 9, 128);
pos_y = 0;
disp_cursor_color(1, -1);
lcd.drawStr(0, pos_y, "Voltage factors");
disp_cursor_color(2, -1);
lcd.drawStr(0, pos_y, "Voltage drops");
break;
default:
break;
}
break;
case 3:
max_site = 0;
switch (site[3]) {
case 0:
max_cursor = 3;
if (buttons[4]) {
switch (cursor[3]) {
case 0:
EEPROM_update();
break;
case 1:
EEPROM_read();
digitalWrite(BUZZER_PIN, HIGH);
delay(50);
digitalWrite(BUZZER_PIN, LOW);
delay(100);
digitalWrite(BUZZER_PIN, HIGH);
delay(20);
digitalWrite(BUZZER_PIN, LOW);
break;
case 2:
EEPROM_0();
break;
case 3:
break;
}
}
disp_cursor_color(0, -1);
lcd.drawStr(0, pos_y, "EEPROM save");
disp_cursor_color(1, -1);
lcd.drawStr(0, pos_y, "EEPROM load");
disp_cursor_color(2, -1);
lcd.drawStr(0, pos_y, "EEPROM reset");
disp_cursor_color(3, -1);
lcd.drawStr(0, pos_y, "EEPROM default");
lcd.setDrawColor(1);
break;
default:
break;
}
break;
case 4:
max_site = 0;
switch (site[3]) {
case 0:
max_cursor = 4;
switch (cursor[3]) { //Sterowanie
case 0:
body_weight = body_weight + buttons[7] - buttons[1] + encoder_out_func();
if (body_weight < 0) body_weight = 0;
break;
case 1:
bike_weight = bike_weight + buttons[7] - buttons[1] + encoder_out_func();
if (bike_weight < 0) bike_weight = 0;
break;
case 2:
friction_coe = friction_coe + buttons[7] * 0.01 - buttons[1] * 0.01 + encoder_out_func() * 0.01;
if (friction_coe < 0) friction_coe = 0;
break;
case 3:
vel_avg_range = vel_avg_range + buttons[7] * 10 - buttons[1] * 10 + encoder_out_func() * 10;
if (vel_avg_range > 60000) vel_avg_range = 0;
break;
case 4:
menu = menu + buttons[4];
break;
default:
break;
}
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "Bike weight");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "Body weight");
disp_cursor_color(2, 0);
lcd.drawStr(0, pos_y, "friction coe.");
disp_cursor_color(3, 0);
lcd.drawStr(0, pos_y, "AVG vel range");
disp_cursor_color(4, 0);
lcd.drawStr(0, pos_y, "Gears");
lcd.setDrawColor(1);
lcd.setCursor(93, 0);
lcd.print(body_weight, 0);
lcd.print("kg");
lcd.setCursor(93, 9);
lcd.print(bike_weight, 0);
lcd.print("kg");
lcd.setCursor(93, 18);
lcd.print(friction_coe, 2); /*
lcd.setFont(u8g2_font_4x6_tf);
lcd.print("N/m^2/s^2");
lcd.setFont(u8g2_font_6x10_tf);*/
lcd.setCursor(93, 27);
lcd.print(vel_avg_range);
lcd.print("m");
break;
default:
break;
}
break;
case 5:
max_site = 1;
switch (site[3]) {
case 0:
max_cursor = 6;
lcd.setCursor(0, 0);
lcd.print(lcd_backlight);
lcd.setCursor(0, 9);
lcd.print(light_power[0]);
lcd.setCursor(0, 18);
lcd.print(light_power[1]);
lcd.setCursor(0, 27);
lcd.print(voltage[0]);
lcd.setCursor(0, 36);
lcd.print(voltage[1]);
lcd.setCursor(0, 45);
lcd.print(voltage[2]);
lcd.setCursor(0, 54);
lcd.print(voltage[3]);
lcd.setCursor(30, 0);
lcd.print(temperature[0]);
lcd.setCursor(30, 9);
lcd.print(temperature[1]);
lcd.setCursor(30, 18);
lcd.print(temperature[2]);
lcd.setCursor(30, 27);
lcd.print(temperature[3]);
lcd.setCursor(90, 36);
lcd.print(light_level);
lcd.setCursor(30, 36);
lcd.print(digitalRead(ENCODER_A_PIN));
lcd.setCursor(30, 45);
lcd.print(digitalRead(ENCODER_B_PIN));
lcd.setCursor(30, 54);
lcd.print(encoder_out);
lcd.setCursor(40, 36);
lcd.print(test_1);
lcd.setCursor(40, 45);
lcd.print(test_2);
lcd.setCursor(65, 0);
lcd.print(light_power_out[0]);
lcd.setCursor(65, 9);
lcd.print(light_power_out[1]);
lcd.setCursor(65, 18);
lcd.print(cursor[menu]);
lcd.print(" ");
lcd.print(site[menu]);
lcd.print(" ");
lcd.print(max_site);
lcd.setCursor(65, 27);
lcd.print(analogRead(CELL_1_PIN));
lcd.setCursor(65, 36);
lcd.print(analogRead(CELL_2_PIN));
lcd.setCursor(65, 45);
lcd.print(analogRead(CELL_3_PIN));
lcd.setCursor(65, 54);
lcd.print(analogRead(CELL_4_PIN));
break;
case 1:
max_cursor = 3;
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "1");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "2");
disp_cursor_color(2, 0);
lcd.drawStr(0, pos_y, "3");
disp_cursor_color(3, 0);
lcd.drawStr(0, pos_y, "4");
lcd.setDrawColor(1);
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
case 4:
switch (site[1]) {
case 0:
switch (cursor[1]) {
case 0:
switch (site[2]) {
case 0:
switch (cursor[2]) {
case 2:
switch (site[3]) {
case 0:
switch (cursor[3]) {
case 1:
max_site = 0;
switch (site[4]) {
case 0:
max_cursor = 4;
voltage_factor[cursor[4] - 1] = voltage_factor[cursor[4] - 1] + 0.000001 * float(buttons[7] - buttons[1] + encoder_out_func());
if (voltage_factor[cursor[4] - 1] < 0) voltage_factor[cursor[4] - 1] = 0;
if (cursor[menu] == 0) {
cursor[menu] = 1;
};
lcd.setCursor(0, 1);
lcd.print(voltage[0]);
lcd.print(" ");
lcd.print(voltage[1]);
lcd.print(" ");
lcd.print(voltage[2]);
lcd.print(" ");
lcd.print(voltage[3]);
lcd.print(" V");
lcd.drawHLine(0, 9, 128);
pos_y = 0;
disp_cursor_color(1, 1);
lcd.drawStr(0, pos_y, "Cell 1");
disp_cursor_color(2, 1);
lcd.drawStr(0, pos_y, "Cell 2");
disp_cursor_color(3, 1);
lcd.drawStr(0, pos_y, "Cell 3");
disp_cursor_color(4, 1);
lcd.drawStr(0, pos_y, "Cell 4");
lcd.setDrawColor(1);
lcd.setCursor(93, 9);
lcd.print(voltage_factor[0] * 1000000, 0);
lcd.setCursor(93, 18);
lcd.print(voltage_factor[1] * 1000000, 0);
lcd.setCursor(93, 27);
lcd.print(voltage_factor[2] * 1000000, 0);
lcd.setCursor(93, 36);
lcd.print(voltage_factor[3] * 1000000, 0);
lcd.setCursor(93, 54);
lcd.print("*10");
lcd.setFont(u8g2_font_4x6_tf);
lcd.setCursor(111, 52);
lcd.print("-6");
lcd.setFont(u8g2_font_6x10_tf);
break;
default:
break;
}
break;
case 2:
max_site = 0;
switch (site[4]) {
case 0:
max_cursor = 2;
switch (cursor[4]) {
case 1:
internal_resistance = internal_resistance + 0.01 * float(buttons[7] - buttons[1] + encoder_out_func());
if (internal_resistance < 0) internal_resistance = 0;
if (internal_resistance > 9.99) internal_resistance = 9.99;
break;
case 2:
menu = menu + buttons[4];
break;
default:
break;
}
if (cursor[menu] == 0) {
cursor[menu] = 1;
};
lcd.setCursor(0, 1);
lcd.print(voltage[0]);
lcd.print(" ");
lcd.print(voltage[1]);
lcd.print(" ");
lcd.print(voltage[2]);
lcd.print(" ");
lcd.print(voltage[3]);
lcd.print(" V");
lcd.drawHLine(0, 9, 128);
pos_y = 0;
disp_cursor_color(1, 1);
lcd.drawStr(0, pos_y, "Resistance");
disp_cursor_color(2, 1);
lcd.drawStr(0, pos_y, "Temp. factors");
lcd.setDrawColor(1);
lcd.setCursor(93, 9);
lcd.print(internal_resistance, 2);
lcd.drawXBMP(117, 10, 5, 7, bitmap_ohm);
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
case 4:
switch (site[3]) {
case 0:
switch (cursor[3]) {
case 4:
max_site = 0;
switch (site[4]) {
case 0:
max_cursor = 1;
menu = menu + buttons[4];
disp_cursor_color(0, -1);
lcd.drawStr(0, pos_y, "Front gear");
disp_cursor_color(1, -1);
lcd.drawStr(0, pos_y, "Rear gear");
lcd.setDrawColor(1);
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
case 5:
switch (site[1]) {
case 0:
switch (cursor[1]) {
case 0:
switch (site[2]) {
case 0:
switch (cursor[2]) {
case 2:
switch (site[3]) {
case 0:
switch (cursor[3]) {
case 2:
switch (site[4]) {
case 0:
switch (cursor[4]) {
case 2:
max_site = 0;
switch (site[5]) {
case 0:
max_cursor = 3;
switch (cursor[5]) {
case 1:
temp_factor[0] = temp_factor[0] + 0.0001 * float(buttons[7] - buttons[1] + encoder_out_func());
break;
case 2:
temp_factor[1] = temp_factor[1] + 0.0001 * float(buttons[7] - buttons[1] + encoder_out_func());
break;
case 3:
temp_factor[2] = temp_factor[2] + 0.0001 * float(buttons[7] - buttons[1] + encoder_out_func());
break;
default:
break;
}
if (cursor[menu] == 0) {
cursor[menu] = 1;
};
lcd.setCursor(0, 1);
lcd.print(voltage[0]);
lcd.print(" ");
lcd.print(voltage[1]);
lcd.print(" ");
lcd.print(voltage[2]);
lcd.print(" ");
lcd.print(voltage[3]);
lcd.print(" V");
lcd.drawHLine(0, 9, 128);
pos_y = 0;
disp_cursor_color(1, 1);
lcd.drawStr(0, pos_y, "Short factor");
disp_cursor_color(2, 1);
lcd.drawStr(0, pos_y, "Long factor");
disp_cursor_color(3, 1);
lcd.drawStr(0, pos_y, "MOSFET factor");
lcd.setDrawColor(1);
lcd.setCursor(93, 9);
lcd.print(temp_factor[0], 4);
lcd.setCursor(93, 18);
lcd.print(temp_factor[1], 4);
lcd.setCursor(93, 27);
lcd.print(temp_factor[2], 4);
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
case 4:
switch (site[3]) {
case 0:
switch (cursor[3]) {
case 4:
switch (site[4]) {
case 0:
switch (cursor[4]) {
case 0:
max_site = 0;
switch (site[5]) {
case 0:
max_cursor = 3;
switch (cursor[5]) { //Sterowanie
case 0:
shift[0] = shift[0] + buttons[7] - buttons[1] + encoder_out_func();
if (shift[0] > 3) shift[0] = 0;
if (shift[0] > 2) shift[0] = 2;
break;
default:
gear_f[cursor[5] - 1] = gear_f[cursor[5] - 1] + buttons[7] - buttons[1] + encoder_out_func();
if (gear_f[cursor[5] - 1] < 1) gear_f[cursor[5] - 1] = 1;
break;
}
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "Shift");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "gear teeths 1");
disp_cursor_color(2, 0);
lcd.drawStr(0, pos_y, "gear teeths 2");
disp_cursor_color(3, 0);
lcd.drawStr(0, pos_y, "gear teeths 3");
lcd.setDrawColor(1);
lcd.setCursor(93, 0);
lcd.print(shift[0] + 1);
lcd.setCursor(93, 9);
lcd.print(gear_f[0]);
lcd.setCursor(93, 18);
lcd.print(gear_f[1]);
lcd.setCursor(93, 27);
lcd.print(gear_f[2]);
break;
default:
break;
}
break;
case 1:
max_site = 1;
switch (site[5]) {
case 0:
max_cursor = 6;
switch (cursor[5]) { //Sterowanie
case 0:
shift[1] = shift[1] + buttons[7] - buttons[1] + encoder_out_func();
if (shift[1] > 7) shift[1] = 0;
if (shift[1] > 6) shift[1] = 6;
break;
case 1:
if (buttons[7] || buttons[1] || encoder_out_func()) { auto_shift = !auto_shift; };
break;
default:
gear_r[cursor[5] - 2] = gear_r[cursor[5] - 2] + buttons[7] - buttons[1] + encoder_out_func();
if (gear_r[cursor[5] - 5] < 1) gear_r[cursor[5] - 5] = 1;
break;
}
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "Shift");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "Auto shift");
disp_cursor_color(2, 0);
lcd.drawStr(0, pos_y, "gear teeths 1");
disp_cursor_color(3, 0);
lcd.drawStr(0, pos_y, "gear teeths 2");
disp_cursor_color(4, 0);
lcd.drawStr(0, pos_y, "gear teeths 3");
disp_cursor_color(5, 0);
lcd.drawStr(0, pos_y, "gear teeths 4");
disp_cursor_color(6, 0);
lcd.drawStr(0, pos_y, "gear teeths 5");
lcd.setDrawColor(1);
lcd.setCursor(93, 0);
lcd.print(shift[1] + 1);
lcd.setCursor(93, 9);
lcd.print(auto_shift);
lcd.setCursor(93, 18);
lcd.print(gear_r[0]);
lcd.setCursor(93, 27);
lcd.print(gear_r[1]);
lcd.setCursor(93, 36);
lcd.print(gear_r[2]);
lcd.setCursor(93, 45);
lcd.print(gear_r[3]);
lcd.setCursor(93, 54);
lcd.print(gear_r[4]);
break;
case 1:
max_cursor = 1;
gear_r[cursor[5] + 5] = gear_r[cursor[5] + 5] + buttons[7] - buttons[1] + encoder_out_func();
if (gear_r[cursor[5] + 5] < 1) gear_r[cursor[5] + 5] = 1;
disp_cursor_color(0, 0);
lcd.drawStr(0, pos_y, "gear teeths 6");
disp_cursor_color(1, 0);
lcd.drawStr(0, pos_y, "gear teeths 7");
lcd.setDrawColor(1);
lcd.setCursor(93, 0);
lcd.print(gear_r[5]);
lcd.setCursor(93, 9);
lcd.print(gear_r[6]);
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
break;
case 6:
break;
}
lcd.setDrawColor(1);
lcd.sendBuffer();
}