#pragma once #include #include #include /** * @brief The CurrentTransformer class is a class for reading the current and energy from a current transformer that's connected to the AnalogCard. * Also supports storing energy to FRAM. */ class CurrentTransformer { public: CurrentTransformer(AnalogCard* analogCard, uint8_t pin, float *voltage, std::function adcToCurrent, uint32_t conversionInterval); void bindFRAM(FRAM *fram, uint32_t framAddress); // Takes 16 bytes of FRAM (long double energy) void begin(); void loop(); void beginConversion(); void setEnergy(float energy); void resetEnergy(); float getCurrent(); long double getEnergy(); float getPower(); void saveEnergy(); void loadEnergy(); void setEnergyAutoSave(bool autoSave); float getVoltage(); uint8_t registerCallback(std::function callback); void unregisterCallback(uint8_t handler); private: AnalogCard* analogCard; uint8_t pin; uint32_t framAddress; FRAM *fram; uint32_t conversionInterval; bool autoSave; float calibration; long double energy; float current; float *voltage; uint32_t lastConversionTime; std::function adcToCurrent; // std::function that convert adc value to current in amps uint8_t handler_count = 0; std::map> callbacks; };