#include int interval = 5; //Counter refresh and save interval int wh_start, wh_total; int pulseCount, crontimer; void setup() { Serial.begin(9600); attachInterrupt(0, onPulse, FALLING); } void loop() { if(millis()/1000 > crontimer+interval){ crontimer = millis()/1000; wh_total = read_counter(0); wh_total = wh_total+pulseCount; save_counter(0, wh_total); pulseCount = 0; Serial.print("Start Wh: "); Serial.println(wh_start); Serial.print("Total Wh: "); Serial.println(wh_total); Serial.println("================"); } } int read_counter(int address) { long byte_2 = EEPROM.read(address); long byte_1 = EEPROM.read(address + 1); return ((byte_2 << 0) & 0xFFFFFF) + ((byte_1 << 8) & 0xFFFFFFFF); } void save_counter(int address, int value) { byte byte_2 = (value & 0xFF); byte byte_1 = ((value >> 8) & 0xFF); EEPROM.update(address, byte_2); EEPROM.update(address + 1, byte_1); } void onPulse() { pulseCount++; wh_start++; }