@@ -13,39 +13,29 @@ bool DEBUG_ssr = true;
1313#else
1414bool DEBUG_ssr = false;
1515#endif
16-
16+
1717bool ssrDisabled = true; // safety ON
1818float 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
2121
2222int _ssrRelayPin = -1 ;
2323
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-
3724void 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-
4425 #ifdef ESP8266
4526 analogWriteRange (255 ); // esp8266
4627 // analogWriteFreq(120); // min 100hz
4728 #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 );
4939}
5040
5141void ssr_init (){
@@ -55,6 +45,7 @@ void ssr_init(){
5545// This is where the SSR is controlled via PWM
5646void SetSSRFrequency ( int duty ,int power = 1 )
5747{
48+ if (duty != currentDuty ){
5849 // calculate the wanted duty based on settings power override
5950 duty = ((float )duty * power ); // power adjust
6051 duty = constrain ( round_f ( duty ), 0 , 255 ); // round and clamp
@@ -69,25 +60,43 @@ void SetSSRFrequency( int duty,int power =1)
6960 #ifdef ESP8266
7061 analogWrite ( _ssrRelayPin , out );
7162 #elif defined(ESP32 )
63+ Serial .println ("[DAC] - " + (String )out );
7264 analogWrite ( _ssrRelayPin , out );
7365 // dacWrite(_ssrRelayPin,out);
7466 #endif
7567 // if(duty == 0)ssr_off();
7668 // if(duty == 255)ssr_on();
7769 }
78- else ssr_off (); // ENFORCE SAFETY
70+ // else ssr_off(); // ENFORCE SAFETY
7971
80- if (duty != currentDuty ){
8172 // 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 );
8374 else {
84- if (DEBUG_ssr ) Logger .print ("[SSR] ON" );
75+ if (DEBUG_ssr ) Logger .print ("[SSR] Duty ON" );
8576 if (DEBUG_ssr ) Logger .println ( " - duty: " + (String )duty + " " + String ( ( duty / 256.0 ) * 100 ) + "%" + " pow:" + String ( round_f ( power * 100 )) + "%" );
8677 }
8778 }
8879 currentDuty = duty ;
8980}
9081
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+
91100void setSSR (int duty ){
92101 SetSSRFrequency (duty );
93102}
@@ -107,11 +116,27 @@ float getSSRPower(){
107116}
108117
109118void ssr_resume (){
110- if (_ssrRelayPin > 0 ) setSSR (currentDuty );
119+ Serial .println ("[SSR] ssr_resume" );
120+ if (_ssrRelayPin >= 0 ) setSSR (currentDuty );
111121}
112122
113123void disableSSR (bool disabled = true){
124+ Serial .println ("[SSR] disable ssr - " + (String )disabled );
125+ setSSR (0 );
126+ ssr_off ();
114127 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 ();
115140}
116141
117142void toggleSSR (){
@@ -154,21 +179,35 @@ void ssrTest(int speed){
154179}
155180
156181void ssrPing (int speed ){
157-
182+ Serial .println ("[SSR] PING" );
183+
184+ ssrDisabled = false;
185+ ssr_off ();
186+ ssr_off ();
187+
188+ delay (500 );
158189 ssr_on ();
159- delay (1000 );
190+ delay (speed * 3 );
160191 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 );
161199
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+ // }
166204
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+ // }
171209
172210 ssr_off ();
211+ ssrDisabled = true;
173212}
174213#endif
0 commit comments