Splitted code to classes.

This commit is contained in:
Author glitchrain
2024-12-13 21:30:48 -08:00
committed by s.aydarov
parent 6bfbc0ccff
commit 03106054c5
7 changed files with 406 additions and 312 deletions

22
Defines.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef EYE_TRAINER_CONSTANTS
#define EYE_TRAINER_CONSTANTS 0
#define PIN_LED_GND_BUS 6
#define MAX_LED_INDEX 15
#define MAX_BRIGHTNESS 255.0
#define MIN_BRIGHTNESS 25.5
#define PIN_BTN_MAIN 9
#define PIN_BTN_UP 10
#define PIN_BTN_DOWN 11
#define PIN_DISPLAY_CLK 7
#define PIN_DISPLAY_DIO 8
#define PIN_LED_DATA 5
#define PIN_LED_LATCH 4
#define PIN_LED_CLOCK 3
#define REGISTER_SIZE 2
#endif

167
DisplayHelper.h Normal file
View File

@@ -0,0 +1,167 @@
#include <TM1637Display.h>
#include "Defines.h"
class DisplayHelper
{
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 250
public:
DisplayHelper() { }
void setup()
{
pinMode(PIN_BTN_MAIN, INPUT);
pinMode(PIN_BTN_UP, INPUT);
pinMode(PIN_BTN_DOWN, INPUT);
display.setBrightness(0x0f);
}
void buttonsTest()
{
bool btnMainState = digitalRead(PIN_BTN_MAIN);
bool btnUpState = digitalRead(PIN_BTN_UP);
bool btnDownState = digitalRead(PIN_BTN_DOWN);
int numChanged = currentNum;
if(btnMainState == HIGH)
{
numChanged = 0;
}
else if (btnUpState == HIGH)
{
numChanged++;
}
else if (btnDownState == HIGH)
{
numChanged--;
}
if(numChanged != currentNum)
{
currentNum = numChanged;
display.clear();
display.showNumberDec(currentNum, false);
}
}
void runTest()
{
int k;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
display.setBrightness(0x0f);
// All segments on
display.setSegments(data);
delay(TEST_DELAY);
// Selectively set different digits
data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(1);
data[2] = display.encodeDigit(2);
data[3] = display.encodeDigit(3);
display.setSegments(data);
delay(TEST_DELAY);
/*
for(k = 3; k >= 0; k--) {
display.setSegments(data, 1, k);
delay(TEST_DELAY);
}
*/
display.clear();
display.setSegments(data+2, 2, 2);
delay(TEST_DELAY);
display.clear();
display.setSegments(data+2, 2, 1);
delay(TEST_DELAY);
display.clear();
display.setSegments(data+1, 3, 1);
delay(TEST_DELAY);
// Show decimal numbers with/without leading zeros
display.showNumberDec(0, false); // Expect: ___0
delay(TEST_DELAY);
display.showNumberDec(0, true); // Expect: 0000
delay(TEST_DELAY);
display.showNumberDec(1, false); // Expect: ___1
delay(TEST_DELAY);
display.showNumberDec(1, true); // Expect: 0001
delay(TEST_DELAY);
display.showNumberDec(301, false); // Expect: _301
delay(TEST_DELAY);
display.showNumberDec(301, true); // Expect: 0301
delay(TEST_DELAY);
display.clear();
display.showNumberDec(14, false, 2, 1); // Expect: _14_
delay(TEST_DELAY);
display.clear();
display.showNumberDec(4, true, 2, 2); // Expect: __04
delay(TEST_DELAY);
display.showNumberDec(-1, false); // Expect: __-1
delay(TEST_DELAY);
display.showNumberDec(-12); // Expect: _-12
delay(TEST_DELAY);
display.showNumberDec(-999); // Expect: -999
delay(TEST_DELAY);
display.clear();
display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
delay(TEST_DELAY);
display.showNumberHexEx(0xf1af); // Expect: f1Af
delay(TEST_DELAY);
display.showNumberHexEx(0x2c); // Expect: __2C
delay(TEST_DELAY);
display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
delay(TEST_DELAY);
display.clear();
display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
delay(TEST_DELAY);
// Run through all the dots
for(k=0; k <= 4; k++) {
display.showNumberDecEx(0, (0x80 >> k), true);
delay(TEST_DELAY);
}
// Brightness Test
for(k = 0; k < 4; k++)
data[k] = 0xff;
for(k = 0; k < 7; k++) {
display.setBrightness(k);
display.setSegments(data);
delay(TEST_DELAY);
}
// On/Off test
for(k = 0; k < 4; k++)
{
display.setBrightness(7, false); // Turn off
display.setSegments(data);
delay(TEST_DELAY);
display.setBrightness(7, true); // Turn on
display.setSegments(data);
delay(TEST_DELAY);
}
// Done!
display.setSegments(SEG_DONE);
}
private:
TM1637Display display = TM1637Display::TM1637Display(PIN_DISPLAY_CLK, PIN_DISPLAY_DIO);
int currentNum = 0;
// const uint8_t SEG_DONE[] = {
uint8_t SEG_DONE[4] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
};

27
Enums.h Normal file
View File

@@ -0,0 +1,27 @@
#ifndef EYE_TRAINER_ENUMS
#define EYE_TRAINER_ENUMS 0
enum DeviceMode
{
IDLE,
SETTINGS_MODE,
SETTINGS_BRIGHTNESS,
SETTINGS_TIME,
RUN
};
enum RunMode
{
Forward,
Backward,
Bothward,
Random,
};
enum TimeMode
{
Const,
Manual
};
#endif

49
EyeTrainerMain.h Normal file
View File

@@ -0,0 +1,49 @@
#include "Defines.h"
#include "DisplayHelper.h"
#include "Settings.h"
#include "LEDRunner.h"
class EyeTrainerMain
{
public:
//==============================================================
//state
//==============================================================
DeviceMode m_deviceMode;
Settings m_Settings;
LEDRunner m_LEDRunner;
DisplayHelper m_DisplayHelper;
//==============================================================
//end of state
//==============================================================
EyeTrainerMain() { }
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
m_Settings = Settings();
m_LEDRunner = LEDRunner(m_Settings);
m_LEDRunner.setup();
m_DisplayHelper = DisplayHelper();
m_DisplayHelper.setup();
}
void loop()
{
}
void runTest()
{
m_LEDRunner.runTest();
m_DisplayHelper.runTest();
}
private:
};

View File

@@ -1,324 +1,17 @@
/*
ShiftRegister74HC595 - Library for simplified control of 74HC595 shift registers.
Developed and maintained by Timo Denk and contributers, since Nov 2014.
Additional information is available at https://timodenk.com/blog/shift-register-arduino-library/
Released into the public domain.
*/
#include <ShiftRegister74HC595.h>
#include <TM1637Display.h>
#include "EyeTrainerMain.h"
#define PIN_LED_GND_BUS 6
#define MAX_LED_INDEX 15
#define MAX_BRIGHTNESS 255.0
#define MIN_BRIGHTNESS 25.5
#define PIN_BTN_MAIN 9
#define PIN_BTN_UP 10
#define PIN_BTN_DOWN 11
#define PIN_DISPLAY_CLK 7
#define PIN_DISPLAY_DIO 8
#define BTN_DELAY
enum DeviceMode
{
IDLE,
SETTINGS_MODE,
SETTINGS_BRIGHTNESS,
SETTINGS_TIME,
RUN
};
enum RunMode
{
Forward,
Backward,
Bothward,
Random,
};
enum TimeMode
{
Const,
Manual
};
//==============================================================
//state
//==============================================================
// create a global shift register object
// parameters: <number of shift registers> (data pin, clock pin, latch pin)
ShiftRegister74HC595<2> sr(5, 3, 4);
DeviceMode m_deviceMode;
RunMode m_RunMode;
TimeMode m_TimeMode;
float m_SwitchTime;
int m_CurrentLED;
//==============================================================
//end of state
//==============================================================
EyeTrainerMain m_EyeTrainerMain;
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PIN_LED_GND_BUS, OUTPUT);
m_EyeTrainerMain = EyeTrainerMain();
m_EyeTrainerMain.setup();
}
void loop()
{
// // setting all pins at the same time to either HIGH or LOW
// sr.setAllHigh(); // set all pins HIGH
// delay(500);
analogWrite(PIN_LED_GND_BUS, 120);
for(int i = 0; i < 4; i++)
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(250); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(250); // wait for a second
}
sr.setAllHigh();
delay(500);
sr.setAllLow();
delay(500);
sr.setAllHigh();
delay(500);
sr.setAllLow();
delay(500);
for(int i = 0; i < 4; i++)
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(150); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(150); // wait for a second
}
for(int j = 0; j < 4; j++)
{
// setting single pins
for (int i = 0; i < MAX_LED_INDEX; i++)
{
sr.set(i, HIGH);
delay(25);
sr.set(i, LOW);
}
// setting single pins
for (int i = MAX_LED_INDEX; i > 0; i--)
{
sr.set(i, HIGH);
delay(25);
sr.set(i, LOW);
}
}
sr.set(0, HIGH);
delay(50);
for (int i = 0; i < MAX_LED_INDEX / 2; i++)
{
sr.set(i, HIGH);
sr.set(MAX_LED_INDEX - i, HIGH);
delay(150);
sr.set(i, LOW);
sr.set(MAX_LED_INDEX - i, LOW);
}
for(int j = 0; j < 5; j++)
{
for (int i = MAX_LED_INDEX / 2; i >= 0; i--)
{
sr.set(i, HIGH);
sr.set(MAX_LED_INDEX - i, HIGH);
delay(50);
sr.set(i, LOW);
sr.set(MAX_LED_INDEX - i, LOW);
}
}
sr.setAllHigh(); // set all pins HIGH
for(int i = 10; i > 0; i--)
{
analogWrite(PIN_LED_GND_BUS, i * 25.5);
delay(100);
}
delay(500);
m_EyeTrainerMain.runTest();
}
//============================================================
//DISPLAY TEST!!!!!!!!!!!!!!!
// // The amount of time (in milliseconds) between tests
// #define TEST_DELAY 2000
// const uint8_t SEG_DONE[] = {
// SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
// SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
// SEG_C | SEG_E | SEG_G, // n
// SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
// };
// TM1637Display display(DISPLAY_CLK, DISPLAY_DIO);
// int currentNum = 0;
// void setup()
// {
// pinMode(PIN_BTN_MAIN, INPUT);
// pinMode(PIN_BTN_UP, INPUT);
// pinMode(PIN_BTN_DOWN, INPUT);
// display.setBrightness(0x0f);
// }
// void loop()
// {
// bool btnMainState = digitalRead(PIN_BTN_MAIN);
// bool btnUpState = digitalRead(PIN_BTN_UP);
// bool btnDownState = digitalRead(PIN_BTN_DOWN);
// int numChanged = currentNum;
// if(btnMainState == HIGH)
// {
// numChanged = 0;
// }
// else if (btnUpState == HIGH)
// {
// numChanged++;
// }
// else if (btnDownState == HIGH)
// {
// numChanged--;
// }
// if(numChanged != currentNum)
// {
// currentNum = numChanged;
// display.clear();
// display.showNumberDec(currentNum, false);
// }
// return;
// int k;
// uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
// uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
// display.setBrightness(0x0f);
// // All segments on
// display.setSegments(data);
// delay(TEST_DELAY);
// // Selectively set different digits
// data[0] = display.encodeDigit(0);
// data[1] = display.encodeDigit(1);
// data[2] = display.encodeDigit(2);
// data[3] = display.encodeDigit(3);
// display.setSegments(data);
// delay(TEST_DELAY);
// /*
// for(k = 3; k >= 0; k--) {
// display.setSegments(data, 1, k);
// delay(TEST_DELAY);
// }
// */
// display.clear();
// display.setSegments(data+2, 2, 2);
// delay(TEST_DELAY);
// display.clear();
// display.setSegments(data+2, 2, 1);
// delay(TEST_DELAY);
// display.clear();
// display.setSegments(data+1, 3, 1);
// delay(TEST_DELAY);
// // Show decimal numbers with/without leading zeros
// display.showNumberDec(0, false); // Expect: ___0
// delay(TEST_DELAY);
// display.showNumberDec(0, true); // Expect: 0000
// delay(TEST_DELAY);
// display.showNumberDec(1, false); // Expect: ___1
// delay(TEST_DELAY);
// display.showNumberDec(1, true); // Expect: 0001
// delay(TEST_DELAY);
// display.showNumberDec(301, false); // Expect: _301
// delay(TEST_DELAY);
// display.showNumberDec(301, true); // Expect: 0301
// delay(TEST_DELAY);
// display.clear();
// display.showNumberDec(14, false, 2, 1); // Expect: _14_
// delay(TEST_DELAY);
// display.clear();
// display.showNumberDec(4, true, 2, 2); // Expect: __04
// delay(TEST_DELAY);
// display.showNumberDec(-1, false); // Expect: __-1
// delay(TEST_DELAY);
// display.showNumberDec(-12); // Expect: _-12
// delay(TEST_DELAY);
// display.showNumberDec(-999); // Expect: -999
// delay(TEST_DELAY);
// display.clear();
// display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
// delay(TEST_DELAY);
// display.showNumberHexEx(0xf1af); // Expect: f1Af
// delay(TEST_DELAY);
// display.showNumberHexEx(0x2c); // Expect: __2C
// delay(TEST_DELAY);
// display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
// delay(TEST_DELAY);
// display.clear();
// display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
// delay(TEST_DELAY);
// // Run through all the dots
// for(k=0; k <= 4; k++) {
// display.showNumberDecEx(0, (0x80 >> k), true);
// delay(TEST_DELAY);
// }
// // Brightness Test
// for(k = 0; k < 4; k++)
// data[k] = 0xff;
// for(k = 0; k < 7; k++) {
// display.setBrightness(k);
// display.setSegments(data);
// delay(TEST_DELAY);
// }
// // On/Off test
// for(k = 0; k < 4; k++)
// {
// display.setBrightness(7, false); // Turn off
// display.setSegments(data);
// delay(TEST_DELAY);
// display.setBrightness(7, true); // Turn on
// display.setSegments(data);
// delay(TEST_DELAY);
// }
// // Done!
// display.setSegments(SEG_DONE);
// while(1);
// }

122
LEDRunner.h Normal file
View File

@@ -0,0 +1,122 @@
/*
ShiftRegister74HC595 - Library for simplified control of 74HC595 shift registers.
Developed and maintained by Timo Denk and contributers, since Nov 2014.
Additional information is available at https://timodenk.com/blog/shift-register-arduino-library/
Released into the public domain.
*/
#include "Defines.h"
#include <ShiftRegister74HC595.h>
class LEDRunner
{
public:
LEDRunner()
{
}
LEDRunner(Settings _Settings)
{
m_Settings = _Settings;
}
void setup()
{
pinMode(PIN_LED_GND_BUS, OUTPUT);
pinMode(PIN_LED_DATA, OUTPUT);
pinMode(PIN_LED_CLOCK, OUTPUT);
pinMode(PIN_LED_LATCH, OUTPUT);
}
void runTest()
{
// // setting all pins at the same time to either HIGH or LOW
// sr.setAllHigh(); // set all pins HIGH
// delay(500);
analogWrite(PIN_LED_GND_BUS, 120);
for(int i = 0; i < 4; i++)
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(250); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(250); // wait for a second
}
sr.setAllHigh();
delay(500);
sr.setAllLow();
delay(500);
sr.setAllHigh();
delay(500);
sr.setAllLow();
delay(500);
for(int i = 0; i < 4; i++)
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(150); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(150); // wait for a second
}
for(int j = 0; j < 4; j++)
{
// setting single pins
for (int i = 0; i < MAX_LED_INDEX; i++)
{
sr.set(i, HIGH);
delay(25);
sr.set(i, LOW);
}
// setting single pins
for (int i = MAX_LED_INDEX; i > 0; i--)
{
sr.set(i, HIGH);
delay(25);
sr.set(i, LOW);
}
}
sr.set(0, HIGH);
delay(50);
for (int i = 0; i < MAX_LED_INDEX / 2; i++)
{
sr.set(i, HIGH);
sr.set(MAX_LED_INDEX - i, HIGH);
delay(150);
sr.set(i, LOW);
sr.set(MAX_LED_INDEX - i, LOW);
}
for(int j = 0; j < 5; j++)
{
for (int i = MAX_LED_INDEX / 2; i >= 0; i--)
{
sr.set(i, HIGH);
sr.set(MAX_LED_INDEX - i, HIGH);
delay(50);
sr.set(i, LOW);
sr.set(MAX_LED_INDEX - i, LOW);
}
}
sr.setAllHigh(); // set all pins HIGH
for(int i = 10; i > 0; i--)
{
analogWrite(PIN_LED_GND_BUS, i * 25.5);
delay(100);
}
delay(500);
}
private:
Settings m_Settings;
ShiftRegister74HC595<REGISTER_SIZE> sr = ShiftRegister74HC595<REGISTER_SIZE>::ShiftRegister74HC595(PIN_LED_DATA, PIN_LED_CLOCK, PIN_LED_LATCH);
};

14
Settings.h Normal file
View File

@@ -0,0 +1,14 @@
#include "Defines.h"
#include "Enums.h"
class Settings
{
public:
enum RunMode m_RunMode = RunMode::Random;
enum TimeMode m_TimeMode = TimeMode::Const;
float SwitchTime = 3;
Settings()
{
}
};