99 * *******************************************************************************************/
1010Dimmer::Dimmer () {
1111
12- NewState = 0 ;
12+ NewDimmingLevel = 20 ;
13+ CurrentState = false ;
1314 _DimmingLevel = 20 ;
1415
1516}
@@ -22,7 +23,6 @@ void Dimmer::SetValues(uint8_t NumberOfChannels, uint8_t DimmingStep, uint8_t Di
2223 _NumberOfChannels = NumberOfChannels;
2324 _DimmingStep = DimmingStep;
2425 _DimmingInterval = DimmingInterval;
25- _DimmerState = false ;
2626
2727 uint8_t Channels[4 ] = {Pin1, Pin2, Pin3, Pin4};
2828
@@ -37,52 +37,54 @@ void Dimmer::UpdateDimmer() {
3737 bool AdjustDimming = true ;
3838 bool AdjustColors = true ;
3939 bool ColorStates[4 ] = {false , false , false , false };
40- int DeltaDimming = 0 ;
41- int DeltaColors = 0 ;
40+ uint8_t DeltaDimming = 0 ;
41+ uint8_t DeltaColors = 0 ;
4242 uint32_t Time = millis () - _DimmingInterval;
4343
44- do {
45- if (millis () > Time + _DimmingInterval) {
46- if (_DimmingLevel != NewDimmingLevel) {
47- AdjustDimming = true ;
48- DeltaDimming = (NewDimmingLevel - _DimmingLevel) < 0 ? -_DimmingStep : _DimmingStep;
49- _DimmingLevel += DeltaDimming;
50- }
51- else {
52- AdjustDimming = false ;
53- }
44+ if (CurrentState) {
45+ do {
46+ if (millis () > Time + _DimmingInterval) {
47+ if (_DimmingLevel != NewDimmingLevel) {
48+ AdjustDimming = true ;
49+ DeltaDimming = (NewDimmingLevel - _DimmingLevel) < 0 ? -_DimmingStep : _DimmingStep;
50+ _DimmingLevel += DeltaDimming;
51+ }
52+ else {
53+ AdjustDimming = false ;
54+ }
5455
55- for (int i=0 ; i<_NumberOfChannels; i++) {
56- if (_Values[i] != NewValues[i]) {
57- ColorStates[i] = true ;
58- DeltaColors = (_Values[i] - NewValues[i]) > 0 ? -_DimmingStep : _DimmingStep;
59- _Values[i] += DeltaColors;
60- }
61- else {
62- ColorStates[i] = false ;
63- }
64- }
56+ for (int i=0 ; i<_NumberOfChannels; i++) {
57+ if (_Values[i] != NewValues[i]) {
58+ ColorStates[i] = true ;
59+ DeltaColors = (_Values[i] - NewValues[i]) > 0 ? -_DimmingStep : _DimmingStep;
60+ _Values[i] += DeltaColors;
61+ }
62+ else {
63+ ColorStates[i] = false ;
64+ }
65+ }
6566
66- for (int i=0 ; i<_NumberOfChannels; i++) {
67- if (ColorStates[i]) {
68- AdjustColors = true ;
69- break ;
70- }
71- else {
72- AdjustColors = false ;
73- }
74- }
67+ for (int i=0 ; i<_NumberOfChannels; i++) {
68+ if (ColorStates[i] == true ) {
69+ AdjustColors = true ;
70+ break ;
71+ }
72+ else {
73+ AdjustColors = false ;
74+ }
75+ }
7576
76- for (int i=0 ; i<_NumberOfChannels; i++) {
77- analogWrite (_Channels[i], (int )(_DimmingLevel / 100.0 * _Values[i]));
78- }
77+ for (int i=0 ; i<_NumberOfChannels; i++) {
78+ analogWrite (_Channels[i], (int )(_DimmingLevel / 100.0 * _Values[i]));
79+ }
7980
80- Time = millis ();
81- }
82- else if (millis () < Time) {
83- Time = millis ();
84- }
85- } while (AdjustColors || AdjustDimming);
81+ Time = millis ();
82+ }
83+ else if (millis () < Time) {
84+ Time = millis ();
85+ }
86+ } while (AdjustColors || AdjustDimming);
87+ }
8688}
8789
8890/* *******************************************************************************************
@@ -133,24 +135,29 @@ void Dimmer::ChangeColors() {
133135/* *******************************************************************************************
134136 * Change Status
135137 * *******************************************************************************************/
136- void Dimmer::ChangeState () {
138+ void Dimmer::ChangeState (bool NewState ) {
137139
138- _DimmerState = NewState;
140+ uint8_t TempDimmingLevel = NewDimmingLevel;
141+
142+ if (NewState != CurrentState) {
143+ CurrentState = NewState;
139144
140- if (!NewState) {
141- uint8_t TempLevel = _DimmingLevel;
142- NewDimmingLevel = 0 ;
145+ if (!NewState) {
146+ uint8_t TempLevel = _DimmingLevel;
147+ NewDimmingLevel = 0 ;
143148
144- ChangeLevel ();
149+ ChangeLevel ();
145150
146- _DimmingLevel = TempLevel;
147- }
148- else {
149- NewDimmingLevel = _DimmingLevel;
150- _DimmingLevel = 0 ;
151+ _DimmingLevel = TempLevel;
152+ }
153+ else {
154+ // NewDimmingLevel = _DimmingLevel;
155+ _DimmingLevel = 0 ;
151156
152- ChangeLevel ();
157+ ChangeLevel ();
158+ }
153159 }
160+ NewDimmingLevel = TempDimmingLevel;
154161}
155162
156163/* *******************************************************************************************
0 commit comments