#pragma once #include namespace homekit::temphum { struct SensorData { uint8_t error = 0; double temp = 0; // celsius double rh = 0; // relative humidity percentage }; class Sensor { protected: int dev_addr; public: explicit Sensor(int dev) : dev_addr(dev) {} void setup() const; void writeCommand(int reg) const; virtual SensorData read() = 0; }; class Si7021 : public Sensor { public: SensorData read() override; Si7021() : Sensor(0x40) {} }; class DHT12 : public Sensor { public: SensorData read() override; DHT12() : Sensor(0x5c) {} }; }