@@ -13,39 +13,29 @@ bool DEBUG_ssr = true;
13
13
#else
14
14
bool DEBUG_ssr = false;
15
15
#endif
16
-
16
+
17
17
bool ssrDisabled = true; // safety ON
18
18
float currentDuty = 0 ; // ssrpower
19
- bool invertDuty = true; // invert duty logic vcc range
20
- bool invertLOW = false ; // Drive SSR with VCC
19
+ bool invertDuty = true; // invert duty logic vcc range, true for low side sinking, pwm is high pulse
20
+ bool invertLOW = ! invertDuty ; // Drive SSR with VCC // invert logic for 2 state relay, this is usually opposite of invertDuty
21
21
22
22
int _ssrRelayPin = -1 ;
23
23
24
- void ssr_off (){
25
- if (_ssrRelayPin >= 0 ){
26
- Logger .println ("[SSR] off" );
27
- digitalWrite (_ssrRelayPin , invertLOW ? LOW : HIGH ); // @todo esp32 issue? must do analogwrite first
28
- // analogWrite( _ssrRelayPin, 255);
29
- }
30
- }
31
-
32
- void ssr_on (){
33
- Logger .println ("[SSR] on" );
34
- if (_ssrRelayPin > 0 ) digitalWrite (_ssrRelayPin , invertLOW ? HIGH : LOW );
35
- }
36
-
37
24
void ssr_init (uint16_t pin ){
38
- Logger .println ("[SSR] ready on pin " + (String )_ssrRelayPin );
39
- _ssrRelayPin = pin ;
40
- pinMode ( _ssrRelayPin , OUTPUT );
41
- delay (600 );
42
- ssr_off ();
43
-
44
25
#ifdef ESP8266
45
26
analogWriteRange (255 ); // esp8266
46
27
// analogWriteFreq(120); // min 100hz
47
28
#elif defined(ESP32 )
48
- #endif
29
+ // analogWriteResolution(_ssrRelayPin, 8);
30
+ #endif
31
+
32
+ //ssr enable
33
+
34
+ Serial .println ("[SSR] READY on pin " + (String )_ssrRelayPin );
35
+ _ssrRelayPin = pin ;
36
+ // ssr_off();
37
+ digitalWrite (_ssrRelayPin , invertLOW ? LOW : HIGH );
38
+ pinMode ( _ssrRelayPin , OUTPUT );
49
39
}
50
40
51
41
void ssr_init (){
@@ -55,6 +45,7 @@ void ssr_init(){
55
45
// This is where the SSR is controlled via PWM
56
46
void SetSSRFrequency ( int duty ,int power = 1 )
57
47
{
48
+ if (duty != currentDuty ){
58
49
// calculate the wanted duty based on settings power override
59
50
duty = ((float )duty * power ); // power adjust
60
51
duty = constrain ( round_f ( duty ), 0 , 255 ); // round and clamp
@@ -69,25 +60,43 @@ void SetSSRFrequency( int duty,int power =1)
69
60
#ifdef ESP8266
70
61
analogWrite ( _ssrRelayPin , out );
71
62
#elif defined(ESP32 )
63
+ Serial .println ("[DAC] - " + (String )out );
72
64
analogWrite ( _ssrRelayPin , out );
73
65
// dacWrite(_ssrRelayPin,out);
74
66
#endif
75
67
// if(duty == 0)ssr_off();
76
68
// if(duty == 255)ssr_on();
77
69
}
78
- else ssr_off (); // ENFORCE SAFETY
70
+ // else ssr_off(); // ENFORCE SAFETY
79
71
80
- if (duty != currentDuty ){
81
72
// if(DEBUG_ssr) Logger.println("[SSR] " + (String)duty);
82
- if (duty < 1 && DEBUG_ssr ) Logger .println ("[SSR]: duty OFF - " + (String )out );
73
+ if (duty < 1 && DEBUG_ssr ) Logger .println ("[SSR]: Duty OFF - " + (String )out );
83
74
else {
84
- if (DEBUG_ssr ) Logger .print ("[SSR] ON" );
75
+ if (DEBUG_ssr ) Logger .print ("[SSR] Duty ON" );
85
76
if (DEBUG_ssr ) Logger .println ( " - duty: " + (String )duty + " " + String ( ( duty / 256.0 ) * 100 ) + "%" + " pow:" + String ( round_f ( power * 100 )) + "%" );
86
77
}
87
78
}
88
79
currentDuty = duty ;
89
80
}
90
81
82
+ void ssr_off (){
83
+ if (_ssrRelayPin >= 0 ){
84
+ Logger .println ("[SSR] OFF" );
85
+ SetSSRFrequency (0 ); //working
86
+ analogWrite ( _ssrRelayPin , invertDuty ? 255 : 0 ); // MUST use analogwrite if using shim lib
87
+ // digitalWrite(_ssrRelayPin, invertLOW ? LOW : HIGH); // @todo esp32 issue? must do analogwrite first
88
+ }
89
+ }
90
+
91
+ void ssr_on (){
92
+ if (_ssrRelayPin > 0 ) {
93
+ Logger .println ("[SSR] ON" );
94
+ SetSSRFrequency (255 ); // working
95
+ analogWrite ( _ssrRelayPin , invertDuty ? 0 : 255 );
96
+ // digitalWrite(_ssrRelayPin, invertLOW ? HIGH : LOW);
97
+ }
98
+ }
99
+
91
100
void setSSR (int duty ){
92
101
SetSSRFrequency (duty );
93
102
}
@@ -107,11 +116,27 @@ float getSSRPower(){
107
116
}
108
117
109
118
void ssr_resume (){
110
- if (_ssrRelayPin > 0 ) setSSR (currentDuty );
119
+ Serial .println ("[SSR] ssr_resume" );
120
+ if (_ssrRelayPin >= 0 ) setSSR (currentDuty );
111
121
}
112
122
113
123
void disableSSR (bool disabled = true){
124
+ Serial .println ("[SSR] disable ssr - " + (String )disabled );
125
+ setSSR (0 );
126
+ ssr_off ();
114
127
ssrDisabled = disabled ;
128
+ // init safe state, lockdown
129
+ pinMode (_ssrRelayPin ,INPUT_PULLUP );
130
+ }
131
+
132
+ void enableSSR (bool disabled = true){
133
+ Serial .println ("[SSR] disable ssr - " + (String )disabled );
134
+ setSSR (0 );
135
+ ssr_off ();
136
+ ssrDisabled = disabled ;
137
+ // init safe state
138
+ pinMode (_ssrRelayPin ,OUTPUT );
139
+ ssr_off ();
115
140
}
116
141
117
142
void toggleSSR (){
@@ -154,21 +179,35 @@ void ssrTest(int speed){
154
179
}
155
180
156
181
void ssrPing (int speed ){
157
-
182
+ Serial .println ("[SSR] PING" );
183
+
184
+ ssrDisabled = false;
185
+ ssr_off ();
186
+ ssr_off ();
187
+
188
+ delay (500 );
158
189
ssr_on ();
159
- delay (1000 );
190
+ delay (speed * 3 );
160
191
ssr_off ();
192
+ delay (speed * 3 );
193
+ ssr_on ();
194
+ delay (speed * 2 );
195
+ ssr_off ();
196
+ delay (speed * 2 );
197
+ ssr_on ();
198
+ delay (speed );
161
199
162
- for (int i = 0 ;i < 255 ;i + 20 ){
163
- SetSSRFrequency ( i );
164
- delay (100 );
165
- }
200
+ // for(int i=0;i<255;i+20){
201
+ // SetSSRFrequency( i );
202
+ // delay(100);
203
+ // }
166
204
167
- for (int i = 0 ;i < 255 ;i + 20 ){
168
- SetSSRFrequency ( 255 - i );
169
- delay (100 );
170
- }
205
+ // for(int i=0;i<255;i+20){
206
+ // SetSSRFrequency( 255-i );
207
+ // delay(100);
208
+ // }
171
209
172
210
ssr_off ();
211
+ ssrDisabled = true;
173
212
}
174
213
#endif
0 commit comments