From 20c25767bddd71f23b23d0548773180dd139afff Mon Sep 17 00:00:00 2001 From: Author glitchrain Date: Sat, 14 Dec 2024 07:29:12 -0800 Subject: [PATCH] Added 3 out of 4 run modes. Generally speaking EyeTrainer is now functional. --- Enums.h | 2 +- EyeTrainerMain.h | 26 +++++--------------------- LEDRunner.h | 46 +++++++++++++++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/Enums.h b/Enums.h index efeca35..b2ec5cc 100644 --- a/Enums.h +++ b/Enums.h @@ -22,7 +22,7 @@ enum TimeMode { CONST = 0, MANUAL, - INCREASING + DECREASING }; #endif \ No newline at end of file diff --git a/EyeTrainerMain.h b/EyeTrainerMain.h index 2f3b4e9..e15f53b 100644 --- a/EyeTrainerMain.h +++ b/EyeTrainerMain.h @@ -52,15 +52,7 @@ public: unsigned long deltaTime = millis() - m_PrevTime; m_PrevTime = millis(); - // m_LEDRunner.update(deltaTime); - - switch(m_Settings.m_RunMode) - { - case RunMode::FORWARD: m_LEDRunner.set(0, HIGH); break; - case RunMode::BACKWARD: m_LEDRunner.set(1, HIGH); break; - case RunMode::BOTH: m_LEDRunner.set(2, HIGH); break; - case RunMode::RANDOM: m_LEDRunner.set(3, HIGH); break; - } + m_LEDRunner.update(deltaTime, m_Settings.SwitchTime, m_Settings.m_RunMode, m_Settings.m_TimeMode); } void runTest() @@ -105,6 +97,10 @@ private: m_DrawTitle = true; m_deviceMode = static_cast(wrapInt(static_cast(m_deviceMode) + 1, 5)); UpdateModeDisplay(); + if(m_deviceMode != DeviceMode::RUN) + { + m_LEDRunner.setRun(false); + } } void UpdateModeDisplay() @@ -173,28 +169,16 @@ private: int upDownHoldButtons = GetUpDownButtonsHold(); if(upDownButtons != BTN_DOWN_UP_NO_SHORT_CLICKED) { - m_LEDRunner.set(0, HIGH); m_DrawTitle = false; m_Settings.setSwitchTime(m_Settings.SwitchTime + upDownButtons * 50); - // m_Settings.setSwitchTime(m_Settings.SwitchTime); UpdateModeDisplay(); } - else - { - m_LEDRunner.set(0, LOW); - } if(upDownHoldButtons != 0) { - m_LEDRunner.set(1, HIGH); m_DrawTitle = false; m_Settings.setSwitchTime(m_Settings.SwitchTime + upDownHoldButtons * 50); - // m_Settings.setSwitchTime(m_Settings.SwitchTime); UpdateModeDisplay(); } - else - { - m_LEDRunner.set(1, LOW); - } } void ProcessBrightness() diff --git a/LEDRunner.h b/LEDRunner.h index dd577f7..7deff56 100644 --- a/LEDRunner.h +++ b/LEDRunner.h @@ -28,20 +28,31 @@ public: pinMode(PIN_LED_LATCH, OUTPUT); } - void update(unsigned long _DeltaTime) + void nextLED(RunMode _RunMode) + { + switch(_RunMode) + { + case RunMode::FORWARD: m_CurrentLED = wrapInt(m_CurrentLED + 1, MAX_LED_INDEX + 1); break; + case RunMode::BACKWARD: m_CurrentLED = wrapInt(m_CurrentLED - 1, MAX_LED_INDEX + 1); break; + //TODO: ADD PING PONG + case RunMode::BOTH: m_CurrentLED = wrapInt(m_CurrentLED - 1, MAX_LED_INDEX + 1); break; + case RunMode::RANDOM: m_CurrentLED = random(0, MAX_LED_INDEX + 1); break; + } + } + + void update(unsigned long _DeltaTime, int _SwitchTime, RunMode _RunMode, TimeMode _TimeMode) { if(!m_Run) return; m_CurrentTime += _DeltaTime; - - if((m_CurrentTime / 1000) % 2 != 0) - { - sr.setAllHigh(); - } - else + + if(m_CurrentTime > _SwitchTime) { + m_CurrentTime = 0; + nextLED(_RunMode); sr.setAllLow(); + sr.set(m_CurrentLED, HIGH); } } @@ -180,6 +191,27 @@ public: Settings* m_Settings; bool m_Run = false; unsigned long m_CurrentTime = 0; + int m_CurrentLED = 0; ShiftRegister74HC595 sr = ShiftRegister74HC595::ShiftRegister74HC595(PIN_LED_DATA, PIN_LED_CLOCK, PIN_LED_LATCH); + int wrapInt(int _Num, int _Max) + { + if(_Num < 0) + { + return (_Max - _Num) % _Max; + } + if(_Num >= _Max) + { + return _Num % _Max; + } + + return _Num; + } + + int wrapInt(int _Num, int _Min, int _Max) + { + int num = _Num - _Min; + int max = _Max - _Min; + return wrapInt(num, max) + _Min; + } };