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 REGISTER_SIZE 2
#define LONG_CLICK_TIME_MS 500
#endif #endif

View File

@@ -1,5 +1,9 @@
#ifndef EYE_TRAINER_DISPLAYHELPER
#define EYE_TRAINER_DISPLAYHELPER 0
#include <TM1637Display.h> #include <TM1637Display.h>
#include "Defines.h" #include "Defines.h"
#include "Settings.h"
class DisplayHelper class DisplayHelper
{ {
@@ -9,20 +13,27 @@ class DisplayHelper
public: public:
DisplayHelper() { } DisplayHelper() { }
DisplayHelper(Settings* _Settings)
{
m_Settings = _Settings;
}
void setup() void setup()
{ {
pinMode(PIN_BTN_MAIN, INPUT);
pinMode(PIN_BTN_UP, INPUT);
pinMode(PIN_BTN_DOWN, INPUT);
display.setBrightness(0x0f); display.setBrightness(0x0f);
} }
loop()
{
}
void buttonsTest() void buttonsTest()
{ {
bool btnMainState = digitalRead(PIN_BTN_MAIN); bool btnMainState = digitalRead(PIN_BTN_MAIN);
bool btnUpState = digitalRead(PIN_BTN_UP); bool btnUpState = digitalRead(PIN_BTN_UP);
bool btnDownState = digitalRead(PIN_BTN_DOWN); bool btnDownState = digitalRead(PIN_BTN_DOWN);
int numChanged = currentNum; int numChanged = currentTestNum;
if(btnMainState == HIGH) if(btnMainState == HIGH)
{ {
@@ -37,11 +48,11 @@ public:
numChanged--; numChanged--;
} }
if(numChanged != currentNum) if(numChanged != currentTestNum)
{ {
currentNum = numChanged; currentTestNum = numChanged;
display.clear(); display.clear();
display.showNumberDec(currentNum, false); display.showNumberDec(currentTestNum, false);
} }
} }
@@ -154,7 +165,8 @@ public:
private: private:
TM1637Display display = TM1637Display::TM1637Display(PIN_DISPLAY_CLK, PIN_DISPLAY_DIO); TM1637Display display = TM1637Display::TM1637Display(PIN_DISPLAY_CLK, PIN_DISPLAY_DIO);
int currentNum = 0; Settings* m_Settings;
int currentTestNum = 0;
// const uint8_t SEG_DONE[] = { // const uint8_t SEG_DONE[] = {
uint8_t SEG_DONE[4] = { uint8_t SEG_DONE[4] = {
@@ -164,4 +176,8 @@ private:
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E 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_MODE,
SETTINGS_BRIGHTNESS, SETTINGS_BRIGHTNESS,
SETTINGS_TIME, SETTINGS_TIME,
RUN RUN,
}; };
enum RunMode enum RunMode
{ {
Forward, FORWARD,
Backward, BACKWARD,
Bothward, BOTH,
Random, RANDOM,
TEST
}; };
enum TimeMode enum TimeMode
{ {
Const, CONST,
Manual MANUAL,
INCREASING
}; };
#endif #endif

View File

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

View File

@@ -11,7 +11,5 @@ void setup()
void loop() 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 "Defines.h"
#include <ShiftRegister74HC595.h> #include <ShiftRegister74HC595.h>
#include "Settings.h"
class LEDRunner class LEDRunner
{ {
public: public:
LEDRunner() // LEDRunner()
{ // {
} // }
LEDRunner(Settings _Settings) LEDRunner(Settings* _Settings)
{ {
m_Settings = _Settings; this->m_Settings = _Settings;
} }
void setup() void setup()
@@ -28,6 +28,11 @@ public:
pinMode(PIN_LED_LATCH, OUTPUT); pinMode(PIN_LED_LATCH, OUTPUT);
} }
void loop()
{
}
void runTest() void runTest()
{ {
// // setting all pins at the same time to either HIGH or LOW // // setting all pins at the same time to either HIGH or LOW
@@ -115,8 +120,27 @@ public:
delay(500); 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: private:
Settings m_Settings; Settings* m_Settings;
ShiftRegister74HC595<REGISTER_SIZE> sr = ShiftRegister74HC595<REGISTER_SIZE>::ShiftRegister74HC595(PIN_LED_DATA, PIN_LED_CLOCK, PIN_LED_LATCH); 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 "Defines.h"
#include "Enums.h" #include "Enums.h"
class Settings class Settings
{ {
public: public:
enum RunMode m_RunMode = RunMode::Random; enum RunMode m_RunMode = RunMode::RANDOM;
enum TimeMode m_TimeMode = TimeMode::Const; enum TimeMode m_TimeMode = TimeMode::CONST;
float SwitchTime = 3; float SwitchTime = 3; //In seconds
bool Changed = true;
Settings() 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