8 #include "AccessoryBaseLight.hpp" 18 this->state = LIGHTOFF;
19 this->currentState = LIGHT_OFF;
20 this->startingMillis = 0;
21 this->fadingStep = this->fadingDelay = 0;
22 this->blinkingDelay = 0;
23 this->pOwner = inpOwner;
26 void AccessoryBaseLight::SetState(ACC_STATE inState)
28 if (inState == LIGHTBLINK && this->blinkingDelay == 0)
31 #ifdef ACCESSORIES_DEBUG_MODE 32 Serial.print(F(
"AccessoryBaseLight SetState "));
33 Serial.println(inState == LIGHTON ?
"ON" : inState == LIGHTOFF ?
"OFF" :
"BLINK");
36 this->SetStateRaw(inState);
39 void AccessoryBaseLight::SetStateRaw(ACC_STATE inNewState)
41 if (this->state != inNewState)
43 this->state = inNewState;
46 Accessories::EEPROMSave();
53 this->fadingStep = inStep;
54 this->fadingDelay = inDelay;
55 this->fadingCurrentValue = 0;
57 #ifdef ACCESSORIES_DEBUG_MODE 58 if (this->blinkingDelay > 0 && FADING_FULL_DELAY > this->blinkingDelay)
59 Serial.println(F(
"Light fading duration greater than blinking duration !"));
66 this->pOwner = inpOwner;
67 this->pPort = inpPort;
72 void AccessoryBaseLight::LightFadingRaw(uint8_t inValue)
74 #ifdef ACCESSORIES_DEBUG_MODE 75 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 76 Serial.print(F(
"AccessoryBaseLight Fading at "));
77 Serial.println(inValue);
80 this->fadingCurrentValue = inValue;
84 void AccessoryBaseLight::LightOnRaw()
86 this->LightFadingRaw(this->pPort->
GetSpeed());
89 void AccessoryBaseLight::LightOffRaw()
91 this->LightFadingRaw(0);
95 void AccessoryBaseLight::LightOn()
97 #ifdef ACCESSORIES_DEBUG_MODE 98 Serial.println(F(
"AccessoryBaseLight ON"));
100 this->SetStateRaw(LIGHTON);
103 void AccessoryBaseLight::LightOff()
105 #ifdef ACCESSORIES_DEBUG_MODE 106 Serial.println(F(
"AccessoryBaseLight OFF"));
108 this->SetStateRaw(LIGHTOFF);
111 ACC_STATE AccessoryBaseLight::Toggle()
113 if (this->state == LIGHTON || this->state == LIGHTBLINK)
114 this->SetState(LIGHTOFF);
116 this->SetState(LIGHTBLINK);
125 case ACCESSORIES_EVENT_MOVEPOSITIONID:
126 case ACCESSORIES_EVENT_TOGGLE:
130 case ACCESSORIES_EVENT_MOVE:
133 case ACCESSORIES_MOVE_STRAIGHT:
134 case ACCESSORIES_MOVE_TOP:
135 case ACCESSORIES_MOVE_LEFT:
136 case ACCESSORIES_MOVE_DIVERGE:
137 case ACCESSORIES_MOVE_BOTTOM:
138 case ACCESSORIES_MOVE_RIGHT:
139 case ACCESSORIES_MOVE_ON:
142 case ACCESSORIES_MOVE_OFF:
143 case ACCESSORIES_MOVE_STOP:
146 case ACCESSORIES_MOVE_MORE:
147 case ACCESSORIES_MOVE_LESS:
149 int oldValue = this->pPort->
GetSpeed();
150 this->pPort->
SetSpeed(oldValue + inData);
158 case ACCESSORIES_EVENT_MOVEPOSITION:
160 int oldValue = this->pPort->
GetSpeed();
167 case ACCESSORIES_EVENT_SETSPEED:
176 void AccessoryBaseLight::StartAction()
178 if (this->blinkingDelay > 0 || this->
IsFading())
180 this->startingMillis = millis();
183 #ifdef ACCESSORIES_DEBUG_MODE 184 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 185 Serial.print(F(
"AccessoryBaseLight start action "));
186 Serial.println(this->startingMillis);
191 bool AccessoryBaseLight::ActionEnded()
193 #ifdef ACCESSORIES_DEBUG_MODE 194 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 196 Serial.println(F(
"End action of light."));
201 if (this->state == LIGHTON && this->currentState == LIGHT_ON)
204 if (this->state == LIGHTOFF && this->currentState == LIGHT_OFF)
207 #ifdef ACCESSORIES_DEBUG_MODE 208 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 209 Serial.print(F(
"Light current state : "));
210 switch (this->currentState)
213 Serial.println(F(
"On"));
216 Serial.println(F(
"Off"));
218 case LIGHT_ASCENDING:
219 Serial.println(F(
"Ascending"));
221 case LIGHT_DESCENDING:
222 Serial.println(F(
"Descending"));
227 switch (this->currentState)
230 if (this->state == LIGHTOFF ||
231 (this->
IsBlinking() && millis() - this->startingMillis > this->blinkingDelay - FADING_FULL_DELAY))
233 this->currentState = LIGHT_DESCENDING;
234 this->startingMillis = millis();
235 this->LightFadingRaw(this->pPort->
GetSpeed());
240 if (this->state == LIGHTON ||
241 (this->
IsBlinking() && millis() - this->startingMillis > this->blinkingDelay - FADING_FULL_DELAY))
243 this->currentState = LIGHT_ASCENDING;
244 this->startingMillis = millis();
245 this->LightFadingRaw(0);
249 case LIGHT_ASCENDING:
251 bool endStateAsc =
false;
252 if (this->fadingStep == 0)
255 if (millis() - this->startingMillis > this->fadingDelay)
257 int curr = (int) this->fadingCurrentValue + this->fadingStep;
258 if (curr > this->pPort->
GetSpeed() || curr < 0)
262 this->LightFadingRaw((
unsigned char)curr);
263 this->startingMillis = millis();
271 this->currentState = LIGHT_ON;
273 this->startingMillis = millis();
275 this->startingMillis = 0;
282 case LIGHT_DESCENDING:
284 bool endStateDesc =
false;
285 if (this->fadingStep == 0)
288 if (millis() - this->startingMillis > this->fadingDelay)
290 int curr = (int) this->fadingCurrentValue - this->fadingStep;
295 this->LightFadingRaw((
unsigned char)curr);
296 this->startingMillis = millis();
304 this->currentState = LIGHT_OFF;
306 this->startingMillis = millis();
308 this->startingMillis = 0;
320 int AccessoryBaseLight::EEPROMSave(
int inPos,
bool inSimulate)
323 EEPROM.write(inPos, this->state);
328 int AccessoryBaseLight::EEPROMLoad(
int inPos)
330 this->state = (ACC_STATE)EEPROM.read(inPos++);
335 #ifdef ACCESSORIES_PRINT_ACCESSORIES 336 void AccessoryBaseLight::printAccessory()
338 Serial.print(F(
"Fading Step: "));
339 Serial.print(this->fadingStep);
340 Serial.print(F(
" / Fading Delay: "));
341 Serial.print(this->fadingDelay);
342 Serial.print(F(
" / Blinking Delay: "));
343 Serial.print(this->blinkingDelay);
344 Serial.print(F(
" / "));
347 Serial.println(F(
" "));
virtual void ResetAction()
bool IsActionDelayPending() const
void Event(ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
virtual void MoveLeftDir(unsigned long inDuration = 0)
virtual int SetSpeed(int inSpeed)
void SetFading(uint8_t inStep, uint8_t inDelay)
void begin(Port *inpPort, int inIntensity = 255, Accessory *inpOwner = 0)
void SetStateRaw(ACC_STATE inNewState)
AccessoryBaseLight(Accessory *inpOwner = 0)