Files
helios-evcs/hardware/firmware/lib/IM1281C/src/IM1281C.h

66 lines
1.3 KiB
C++

#ifndef HELIOS_IM1281C_H
#define HELIOS_IM1281C_H
#include <Arduino.h>
#include <ModbusMaster.h>
struct IM1281CAData
{
float voltage = 0.0f;
float current = 0.0f;
float power = 0.0f;
float energy = 0.0f;
float powerFactor = 0.0f;
float co2 = 0.0f;
float temperature = 0.0f;
float frequency = 0.0f;
bool valid = false;
};
struct IM1281CBData
{
float voltage = 0.0f;
float current = 0.0f;
float power = 0.0f;
float energy = 0.0f;
float powerFactor = 0.0f;
float co2 = 0.0f;
bool valid = false;
};
class IM1281C
{
public:
IM1281C();
bool begin(HardwareSerial &serial,
int8_t rxPin,
int8_t txPin,
uint8_t slaveAddress = 1,
uint32_t baudRate = 4800,
uint32_t serialConfig = SERIAL_8N1);
bool readA();
bool readB();
bool readAll();
const IM1281CAData &a() const;
const IM1281CBData &b() const;
uint8_t lastAResult() const;
uint8_t lastBResult() const;
private:
static uint32_t combineWords(uint16_t highWord, uint16_t lowWord);
static float scaleValue(uint32_t raw, float scale);
ModbusMaster _node;
HardwareSerial *_serial;
uint8_t _slaveAddress;
uint8_t _lastAResult;
uint8_t _lastBResult;
IM1281CAData _a;
IM1281CBData _b;
};
#endif // HELIOS_IM1281C_H