Files
miliohm_meter/MilliOhmMeter_FW/src/screen_main.cpp
2022-04-16 21:57:01 +02:00

183 lines
3.9 KiB
C++

#include "screen_main.h"
screen_c mainScreen(e_displayState::mainscreen, 5);
const e_displayState thisScreen = e_displayState::mainscreen;
bool WarningActive = false;
bool confirmed = false;
uint16_t timer = 0;
void button1(void) // yes
{
if (WarningActive)
{
screenMainSetWarning(false);
setMeasureMode(e_measureMode::mA1000);
}
else
{
setMeasureMode(e_measureMode::mA20);
}
}
void button2(void) // no
{
if (WarningActive)
{
screenMainSetWarning(false);
}
else
{
setMeasureMode(e_measureMode::mA200);
}
}
void button3(void)
{
if (!WarningActive)
{
screenMainSetWarning(true);
}
}
void button4(void)
{
if (!WarningActive)
{
clearStats();
}
}
void button5(void)
{
if (!WarningActive)
{
setDisplayState(e_displayState::setupscreen);
log_i("Conf button pressed, go to setupscreen");
}
}
c_onScreenButton ma20("20m", mA20, LocBottom, BUTTON1, &button1);
c_onScreenButton ma200("200m", mA200, LocBottom, BUTTON2, &button2);
c_onScreenButton ma1000("1A", mA1000, LocBottom, BUTTON3, &button3);
c_onScreenButton mauto("Reset", 4, LocBottom, BUTTON4, &button4);
c_onScreenButton bsetup("Conf", 5, LocBottom, BUTTON5, &button5);
c_onScreenButton errorState("ER", 6, LocRight, &getErrorState);
c_onScreenButton okState("OK", 7, LocRight, &getOkState);
c_onScreenButton openState("Open", 8, LocRight, &getOpenState);
c_onScreenButton wifiState("Wifi", 9, LocRight, &getWifiState);
void screenMainSetWarning(bool warning)
{
if (warning)
{
WarningActive = true;
ma20.setAltName("Yes");
ma200.setAltName("No");
ma1000.setAltName("");
mauto.setAltName("");
bsetup.setAltName("");
}
else
{
WarningActive = false;
ma20.clearAltName();
ma200.clearAltName();
ma1000.clearAltName();
mauto.clearAltName();
bsetup.clearAltName();
}
}
void initDisplayMain(void)
{
// fill vector
log_i("Store main screen items");
mainScreen.addItem(&ma20);
mainScreen.addItem(&ma200);
mainScreen.addItem(&ma1000);
mainScreen.addItem(&mauto);
mainScreen.addItem(&bsetup);
mainScreen.addItem(&errorState);
mainScreen.addItem(&okState);
mainScreen.addItem(&openState);
mainScreen.addItem(&wifiState);
mainScreen.begin();
log_i("mainscreen OK");
}
void screenMainDrawLayout(void)
{
drawDashedHLine(0, 12, 220);
drawDashedVLine(40, 12, 33);
getDisplay()->setFont(FONT8);
uint16_t rate = float(1 / getSampleRate());
getDisplay()->setCursor(5, 8);
getDisplay()->printf("Fs:%dHz", rate);
getDisplay()->setCursor(170, 8);
getDisplay()->printf("loop=%dms", timer);
}
void ScreenMainDrawValues(void)
{
getDisplay()->setFont(FONT24);
getDisplay()->setCursor(60, 45);
getDisplay()->printf("%4.3f", getValue());
uint16_t stringwidth = getDisplay()->getStrWidth(drawValue("", getValue(), "").c_str());
getDisplay()->setFont(u8g2_font_8x13_t_symbols);
getDisplay()->drawUTF8(78 + stringwidth + 3, 43, "");
getDisplay()->setFont(FONT8);
// getDisplay()->drawUTF8(60 + stringwidth + 3, 43, "v");
getDisplay()->setCursor(168, 27);
getDisplay()->printf("Min: %4.2f", getADCMin());
getDisplay()->setCursor(168, 36);
getDisplay()->printf("Avg: %4.2f", getADCavg());
getDisplay()->setCursor(168, 45);
getDisplay()->printf("Max: %4.2f", getADCMax());
}
void screenMaindrawWarning(void)
{
getDisplay()->setFont(FONT16);
getDisplay()->setCursor(42, 32);
getDisplay()->printf("WARNING!");
getDisplay()->setCursor(42, 45);
getDisplay()->printf("Confirm to use 1A mode");
}
void screenMainDrawInfo(void)
{
screenMainDrawLayout();
if (WarningActive)
{
screenMaindrawWarning();
}
else
{
ScreenMainDrawValues();
}
}
void setTimer(uint16_t newtimer)
{
timer = newtimer;
}
void ScreenMainHandle(void)
{
if (getDisplay() == NULL)
{
log_e("Display is NULL");
return;
}
mainScreen.activateModeButton(WarningActive);
mainScreen.handle();
mainScreen.draw();
screenMainDrawInfo();
}