@@ -68,6 +68,33 @@ MyMessage wattMsg(CHILD_ID, V_WATT);
6868MyMessage kWhMsg (CHILD_ID, V_KWH);
6969MyMessage pcMsg (CHILD_ID, V_VAR1);
7070
71+ #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
72+ #define IRQ_HANDLER_ATTR ICACHE_RAM_ATTR
73+ #else
74+ #define IRQ_HANDLER_ATTR
75+ #endif
76+
77+ void IRQ_HANDLER_ATTR onPulse ()
78+ {
79+ if (!SLEEP_MODE) {
80+ uint32_t newBlinkmicros = micros ();
81+ uint32_t newBlinkmillis = millis ();
82+ uint32_t intervalmicros = newBlinkmicros - lastBlinkmicros;
83+ uint32_t intervalmillis = newBlinkmillis - lastBlinkmillis;
84+ if (intervalmicros < 10000L && intervalmillis < 10L ) { // Sometimes we get interrupt on RISING
85+ return ;
86+ }
87+ if (intervalmillis < 360000 ) { // Less than an hour since last pulse, use microseconds
88+ watt = (3600000000.0 / intervalmicros) / ppwh;
89+ } else {
90+ watt = (3600000.0 / intervalmillis) /
91+ ppwh; // more thAn an hour since last pulse, use milliseconds as micros will overflow after 70min
92+ }
93+ lastBlinkmicros = newBlinkmicros;
94+ lastBlinkmillis = newBlinkmillis;
95+ }
96+ pulseCount++;
97+ }
7198
7299void setup ()
73100{
@@ -127,7 +154,7 @@ void loop()
127154 }
128155
129156 if (SLEEP_MODE) {
130- sleep (SEND_FREQUENCY);
157+ sleep (SEND_FREQUENCY, false );
131158 }
132159}
133160
@@ -140,25 +167,3 @@ void receive(const MyMessage &message)
140167 pcReceived = true ;
141168 }
142169}
143-
144- void onPulse ()
145- {
146- if (!SLEEP_MODE) {
147- uint32_t newBlinkmicros = micros ();
148- uint32_t newBlinkmillis = millis ();
149- uint32_t intervalmicros = newBlinkmicros - lastBlinkmicros;
150- uint32_t intervalmillis = newBlinkmillis - lastBlinkmillis;
151- if (intervalmicros < 10000L && intervalmillis < 10L ) { // Sometimes we get interrupt on RISING
152- return ;
153- }
154- if (intervalmillis < 360000 ) { // Less than an hour since last pulse, use microseconds
155- watt = (3600000000.0 / intervalmicros) / ppwh;
156- } else {
157- watt = (3600000.0 / intervalmillis) /
158- ppwh; // more thAn an hour since last pulse, use milliseconds as micros will overflow after 70min
159- }
160- lastBlinkmicros = newBlinkmicros;
161- lastBlinkmillis = newBlinkmillis;
162- }
163- pulseCount++;
164- }
0 commit comments