UVControl/ScreenMenu.cpp

101 lines
1.5 KiB
C++

#include "ScreenMenu.h"
#include "ScreenSetTime.h"
#include "ScreenCountdown.h"
#include "ExposureTimer.h"
#include "Config.h"
#include "Buzzer.h"
void ScreenMenu::updateLastActivity()
{
mLastActivity = getCurrentTime();
}
void ScreenMenu::printExposureTime()
{
getDisplay()->setCursor(0, 1);
printTime(ExposureTime);
}
void ScreenMenu::printMenuCursor()
{
getDisplay()->setCursor(0, 0);
getDisplay()->write(mSelected == 0 ? (byte)0 : ' ');
getDisplay()->setCursor(9, 0);
getDisplay()->write(mSelected == 1 ? (byte)0 : ' ');
}
void ScreenMenu::onShow()
{
updateLastActivity();
mSelected = 0;
getDisplay()->setCursor(0, 0);
getDisplay()->print(" Start Reset ");
printMenuCursor();
printExposureTime();
}
void ScreenMenu::onHide()
{
}
void ScreenMenu::onButton()
{
buzzClick();
switch (mSelected)
{
case 0:
digitalWrite(PinLED, HIGH);
StartExposureTimer(getCurrentTime());
getScreenManager()->show<ScreenCountdown>();
break;
case 1:
ResetExposureTime();
getScreenManager()->show<ScreenSetTime>();
}
}
void ScreenMenu::onEncoder(long lastPosition, long newPosition)
{
updateLastActivity();
if (newPosition > lastPosition)
{
if (mSelected < 1)
{
buzzSelect();
mSelected++;
printMenuCursor();
}
}
else
{
if (mSelected > 0)
{
buzzSelect();
mSelected--;
printMenuCursor();
}
}
}
void ScreenMenu::onTick()
{
if (getCurrentTime() - mLastActivity >= MenuTimeout)
getScreenManager()->show<ScreenSetTime>();
}