Implement state memory
This commit is contained in:
parent
baf5547cbd
commit
55a7d2cd0c
2 changed files with 30 additions and 12 deletions
|
@ -3,16 +3,28 @@
|
|||
#include <Arduino.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
LightController::LightController(int *bjtPins, __SIZE_TYPE__ bjtCount)
|
||||
LightController::LightController(const int bjtPins[], int bjtCount)
|
||||
{
|
||||
this->bjtCount = bjtCount;
|
||||
this->bjtPins = bjtPins;
|
||||
this->bjtState = new int[bjtCount];
|
||||
|
||||
for (int i = 0; i < bjtCount; i++)
|
||||
{
|
||||
bjtState[i] = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < bjtCount; i++)
|
||||
{
|
||||
pinMode(bjtPins[i], OUTPUT);
|
||||
bjtState[i] = EEPROM.read(i);
|
||||
commitPinState(i);
|
||||
}
|
||||
}
|
||||
|
||||
void LightController::updateState(const char data[], __SIZE_TYPE__ dataLength, int steps)
|
||||
void LightController::updateState(const char data[], int steps)
|
||||
{
|
||||
for (__SIZE_TYPE__ i = 0; i < bjtCount; i++)
|
||||
for (int i = 0; i < bjtCount; i++)
|
||||
{
|
||||
parseRelativeState(data, i, steps);
|
||||
setAbsoluteState(data, i);
|
||||
|
@ -40,11 +52,11 @@ void LightController::parseRelativeState(const char data[], int index, int steps
|
|||
}
|
||||
else if (data[1] == 'i')
|
||||
{
|
||||
bjtState[index] += steps;
|
||||
bjtState[index] = clampState(bjtState[index] + steps);
|
||||
}
|
||||
else if (data[1] == 'd')
|
||||
{
|
||||
bjtState[index] -= steps;
|
||||
bjtState[index] = clampState(bjtState[index] - steps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +76,7 @@ void LightController::setAbsoluteState(const char data[], int index)
|
|||
|
||||
int LightController::clampState(int stateValue)
|
||||
{
|
||||
int clampedState = 0;
|
||||
int clampedState = stateValue;
|
||||
if (stateValue > 255)
|
||||
{
|
||||
clampedState = 255;
|
||||
|
@ -78,15 +90,20 @@ int LightController::clampState(int stateValue)
|
|||
|
||||
void LightController::commitState(int index)
|
||||
{
|
||||
analogWrite(bjtPins[index], bjtState[index]);
|
||||
commitPinState(index);
|
||||
EEPROM.update(index, bjtState[index]);
|
||||
}
|
||||
|
||||
void LightController::commitPinState(int index)
|
||||
{
|
||||
analogWrite(bjtPins[index], bjtState[index]);
|
||||
}
|
||||
|
||||
int LightController::getBjtCount()
|
||||
{
|
||||
return bjtCount;
|
||||
}
|
||||
int *LightController::getBjtPins()
|
||||
const int *LightController::getBjtPins()
|
||||
{
|
||||
return bjtPins;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ class LightController
|
|||
{
|
||||
protected:
|
||||
int bjtCount;
|
||||
int *bjtPins;
|
||||
const int *bjtPins;
|
||||
int *bjtState;
|
||||
|
||||
private:
|
||||
|
@ -10,11 +10,12 @@ private:
|
|||
void parseRelativeState(const char data[], int index, int steps);
|
||||
int clampState(int stateValue);
|
||||
void commitState(int index);
|
||||
void commitPinState(int index);
|
||||
|
||||
public:
|
||||
LightController(int *bjtPins, __SIZE_TYPE__ bjtCount);
|
||||
void updateState(const char data[], __SIZE_TYPE__ dataLength, int steps);
|
||||
LightController(const int bjtPins[], int bjtCount);
|
||||
void updateState(const char data[], int steps);
|
||||
int getBjtCount();
|
||||
int *getBjtPins();
|
||||
const int *getBjtPins();
|
||||
int *getBjtState();
|
||||
};
|
||||
|
|
Reference in a new issue