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 REGISTER_SIZE 2
|
||||||
|
|
||||||
|
#define LONG_CLICK_TIME_MS 500
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,28 +1,39 @@
|
|||||||
|
#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
|
||||||
{
|
{
|
||||||
// The amount of time (in milliseconds) between tests
|
// The amount of time (in milliseconds) between tests
|
||||||
#define TEST_DELAY 250
|
#define TEST_DELAY 250
|
||||||
|
|
||||||
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
16
Enums.h
@@ -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
|
||||||
@@ -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,16 +27,15 @@ 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());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void runTest()
|
void runTest()
|
||||||
|
|||||||
@@ -11,7 +11,5 @@ void setup()
|
|||||||
|
|
||||||
void loop()
|
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 "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);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
14
Settings.h
14
Settings.h
@@ -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
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