NerfStatTrak/Globals.cpp

75 lines
1.3 KiB
C++

#include "NerfStatTrakConfig.h"
#include "Globals.h"
#include "StateHandler.h"
#include "LowPower.h"
SegmentDisplay* display;
Button* buttonA;
Button* buttonB;
Button* buttonArmed;
uint32_t shots = 0;
uint32_t hits = 0;
unsigned long currentTime;
AbstractStateHandler* currentState;
void setCurrentState(AbstractStateHandler* value)
{
buttonA->block();
buttonB->block();
currentState = value;
currentState->setup();
}
void update()
{
currentTime = millis();
buttonA->update(currentTime);
buttonB->update(currentTime);
buttonArmed->update(currentTime);
// Count the shot no matter which state we're in
if (buttonArmed->changed() && !buttonArmed->pressed())
shots++;
}
void wakeUp()
{
}
void sleep()
{
display->clear();
// Uses RocketScream's Low-Power library
// https://github.com/rocketscream/Low-Power
uint32_t interrupt = digitalPinToInterrupt(NerfButtonWakeUp);
attachInterrupt(interrupt, wakeUp, NerfButtonWakeUpState);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
detachInterrupt(interrupt);
currentTime = millis();
// The button triggers the wake-up, so block the first release after
if (NerfButtonWakeUp == NerfButtonA)
{
buttonA->update(currentTime);
buttonA->block();
}
if (NerfButtonWakeUp == NerfButtonB)
{
buttonB->update(currentTime);
buttonB->block();
}
}