Added buttons controls.

This commit is contained in:
Author glitchrain
2024-12-14 02:46:59 -08:00
committed by s.aydarov
parent 03106054c5
commit 13766ca4f2
9 changed files with 267 additions and 40 deletions

View File

@@ -19,4 +19,6 @@
#define REGISTER_SIZE 2
#define LONG_CLICK_TIME_MS 500
#endif

View File

@@ -1,28 +1,39 @@
#ifndef EYE_TRAINER_DISPLAYHELPER
#define EYE_TRAINER_DISPLAYHELPER 0
#include <TM1637Display.h>
#include "Defines.h"
#include "Settings.h"
class DisplayHelper
{
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 250
#define TEST_DELAY 250
public:
DisplayHelper() { }
DisplayHelper(Settings* _Settings)
{
m_Settings = _Settings;
}
void setup()
{
pinMode(PIN_BTN_MAIN, INPUT);
pinMode(PIN_BTN_UP, INPUT);
pinMode(PIN_BTN_DOWN, INPUT);
display.setBrightness(0x0f);
}
loop()
{
}
void buttonsTest()
{
bool btnMainState = digitalRead(PIN_BTN_MAIN);
bool btnUpState = digitalRead(PIN_BTN_UP);
bool btnDownState = digitalRead(PIN_BTN_DOWN);
int numChanged = currentNum;
int numChanged = currentTestNum;
if(btnMainState == HIGH)
{
@@ -37,11 +48,11 @@ public:
numChanged--;
}
if(numChanged != currentNum)
if(numChanged != currentTestNum)
{
currentNum = numChanged;
currentTestNum = numChanged;
display.clear();
display.showNumberDec(currentNum, false);
display.showNumberDec(currentTestNum, false);
}
}
@@ -154,7 +165,8 @@ public:
private:
TM1637Display display = TM1637Display::TM1637Display(PIN_DISPLAY_CLK, PIN_DISPLAY_DIO);
int currentNum = 0;
Settings* m_Settings;
int currentTestNum = 0;
// const uint8_t SEG_DONE[] = {
uint8_t SEG_DONE[4] = {
@@ -164,4 +176,8 @@ private:
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
};
};
#endif

16
Enums.h
View File

@@ -7,21 +7,23 @@ enum DeviceMode
SETTINGS_MODE,
SETTINGS_BRIGHTNESS,
SETTINGS_TIME,
RUN
RUN,
};
enum RunMode
{
Forward,
Backward,
Bothward,
Random,
FORWARD,
BACKWARD,
BOTH,
RANDOM,
TEST
};
enum TimeMode
{
Const,
Manual
CONST,
MANUAL,
INCREASING
};
#endif

View File

@@ -2,7 +2,7 @@
#include "DisplayHelper.h"
#include "Settings.h"
#include "LEDRunner.h"
#include "InputHelper.h"
class EyeTrainerMain
{
@@ -13,9 +13,10 @@ public:
DeviceMode m_deviceMode;
Settings m_Settings;
LEDRunner m_LEDRunner;
DisplayHelper m_DisplayHelper;
Settings m_Settings = Settings();
LEDRunner m_LEDRunner = LEDRunner(&m_Settings);
DisplayHelper m_DisplayHelper = DisplayHelper(&m_Settings);
InputHelper m_InputHelper = InputHelper();
//==============================================================
//end of state
@@ -26,16 +27,15 @@ public:
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
m_Settings = Settings();
m_LEDRunner = LEDRunner(m_Settings);
m_LEDRunner.setup();
m_DisplayHelper = DisplayHelper();
m_DisplayHelper.setup();
m_InputHelper.setup();
}
void loop()
{
bool inputEvent = m_InputHelper.readInputs(millis());
}
void runTest()

View File

@@ -11,7 +11,5 @@ void setup()
void loop()
{
m_EyeTrainerMain.runTest();
}
m_EyeTrainerMain.loop();
}

53
InputHelper.h Normal file
View File

@@ -0,0 +1,53 @@
#ifndef EYE_TRAINER_INPUTHELPER
#define EYE_TRAINER_INPUTHELPER 0
#include "Defines.h"
#include "SimpleButton.h"
class InputHelper
{
public:
InputHelper() { }
void setup()
{
m_MainButton.setup();
m_UpButton.setup();
m_DownButton.setup();
}
bool readInputs(unsigned long _Time)
{
m_InputEvent = false;
m_InputEvent |= m_MainButton.update(_Time);
m_InputEvent |= m_UpButton.update(_Time);
m_InputEvent |= m_DownButton.update(_Time);
return m_InputEvent;
}
SimpleButton getButtonMain()
{
return m_MainButton;
}
SimpleButton getButtonUp()
{
return m_UpButton;
}
SimpleButton getButtonDown()
{
return m_DownButton;
}
private:
bool m_InputEvent;
SimpleButton m_MainButton = SimpleButton(PIN_BTN_MAIN, LONG_CLICK_TIME_MS);
SimpleButton m_UpButton = SimpleButton(PIN_BTN_UP, LONG_CLICK_TIME_MS);
SimpleButton m_DownButton = SimpleButton(PIN_BTN_DOWN, LONG_CLICK_TIME_MS);
};
#endif

View File

@@ -6,18 +6,18 @@
*/
#include "Defines.h"
#include <ShiftRegister74HC595.h>
#include "Settings.h"
class LEDRunner
{
public:
LEDRunner()
{
}
// LEDRunner()
// {
// }
LEDRunner(Settings _Settings)
LEDRunner(Settings* _Settings)
{
m_Settings = _Settings;
this->m_Settings = _Settings;
}
void setup()
@@ -28,6 +28,11 @@ public:
pinMode(PIN_LED_LATCH, OUTPUT);
}
void loop()
{
}
void runTest()
{
// // setting all pins at the same time to either HIGH or LOW
@@ -115,8 +120,27 @@ public:
delay(500);
}
void blink(const uint8_t _LedIndex, unsigned long _Time)
{
sr.setAllLow();
sr.set(_LedIndex, HIGH);
delay(_Time);
sr.setAllLow();
}
void setAndClearOthers(const uint8_t _LedIndex, const uint8_t _Value)
{
sr.setAllLow();
sr.set(_LedIndex, _Value);
}
void set(const uint8_t _LedIndex, const uint8_t _Value)
{
sr.set(_LedIndex, _Value);
}
private:
Settings m_Settings;
Settings* m_Settings;
ShiftRegister74HC595<REGISTER_SIZE> sr = ShiftRegister74HC595<REGISTER_SIZE>::ShiftRegister74HC595(PIN_LED_DATA, PIN_LED_CLOCK, PIN_LED_LATCH);
};

View File

@@ -1,14 +1,20 @@
#ifndef EYE_TRAINER_SETTINGS
#define EYE_TRAINER_SETTINGS 0
#include "Defines.h"
#include "Enums.h"
class Settings
{
public:
enum RunMode m_RunMode = RunMode::Random;
enum TimeMode m_TimeMode = TimeMode::Const;
float SwitchTime = 3;
enum RunMode m_RunMode = RunMode::RANDOM;
enum TimeMode m_TimeMode = TimeMode::CONST;
float SwitchTime = 3; //In seconds
bool Changed = true;
Settings()
{
}
};
};
#endif

126
SimpleButton.h Normal file
View File

@@ -0,0 +1,126 @@
#ifndef EYE_TRAINER_SIMPLEBUTTON
#define EYE_TRAINER_SIMPLEBUTTON 0
class SimpleButton
{
public:
SimpleButton(int _ButtonPin, unsigned long _LongClickTime)
{
m_LongClickTime = _LongClickTime;
m_ButtonPin = _ButtonPin;
}
void setup()
{
pinMode(m_ButtonPin, INPUT);
}
int update(unsigned long _Time)
{
clearClicks();
int prevState = m_State;
unsigned long deltaTime = _Time - m_PrevTimeMS;
m_PrevTimeMS = _Time;
bool pinState = digitalRead(m_ButtonPin);
if(m_State == PRESSED && pinState)
{
m_PressedTime += deltaTime;
if(m_PressedTime >= m_LongClickTime)
{
m_IsNowHolded = true;
}
}
else if(m_State == PRESSED && !pinState)
{
m_State = RELEASED;
m_IsNowClicked = true;
if(m_PressedTime >= m_LongClickTime)
{
m_IsNowLongClicked = true;
m_PressedTime = 0;
}
else
{
m_IsNowShortClicked = true;
}
}
else if(m_State == RELEASED && pinState)
{
m_State = PRESSED;
m_IsNowPressed = true;
}
return m_IsNowHolded | (prevState != m_State);
}
bool IsNowClicked()
{
return m_IsNowClicked;
}
bool IsNowPressed()
{
return m_IsNowPressed;
}
bool IsNowReleased()
{
return m_IsNowReleased;
}
bool IsHolded()
{
return m_IsNowHolded;
}
bool IsNowLongClicked()
{
return m_IsNowLongClicked;
}
bool IsNowShortClicked()
{
return m_IsNowShortClicked;
}
unsigned long GetPressedTime()
{
return m_PressedTime;
}
private:
static const int CLICK_DELAY = 20;
static const int PRESSED = 1;
static const int RELEASED = 0;
int m_ButtonPin;
int m_State = RELEASED;
unsigned long m_PrevTimeMS = 0;
unsigned long m_PressedTime = 0;
unsigned long m_LongClickTime = 250;
unsigned long m_PressDelayTime = 0;
unsigned long m_ReleaseDelayTime = 0;
bool m_IsNowClicked = false;
bool m_IsNowPressed = false;
bool m_IsNowReleased = false;
bool m_IsNowHolded = false;
bool m_IsNowShortClicked = false;
bool m_IsNowLongClicked = false;
void clearClicks()
{
m_IsNowClicked = false;
m_IsNowPressed = false;
m_IsNowReleased = false;
m_IsNowReleased = false;
m_IsNowHolded = false;
m_IsNowShortClicked = false;
m_IsNowLongClicked = false;
}
};
#endif