Added buttons controls.
This commit is contained in:
committed by
s.aydarov
parent
03106054c5
commit
13766ca4f2
@@ -19,4 +19,6 @@
|
||||
|
||||
#define REGISTER_SIZE 2
|
||||
|
||||
#define LONG_CLICK_TIME_MS 500
|
||||
|
||||
#endif
|
||||
@@ -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
16
Enums.h
@@ -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
|
||||
@@ -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()
|
||||
|
||||
@@ -11,7 +11,5 @@ void setup()
|
||||
|
||||
void loop()
|
||||
{
|
||||
m_EyeTrainerMain.runTest();
|
||||
}
|
||||
|
||||
|
||||
m_EyeTrainerMain.loop();
|
||||
}
|
||||
53
InputHelper.h
Normal file
53
InputHelper.h
Normal 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
|
||||
38
LEDRunner.h
38
LEDRunner.h
@@ -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);
|
||||
|
||||
};
|
||||
|
||||
14
Settings.h
14
Settings.h
@@ -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
126
SimpleButton.h
Normal 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
|
||||
Reference in New Issue
Block a user