#pragma once #include #define MAX_VALVES 16 class Valve { public: struct ValveData { uint8_t pin; bool shiftRegister; uint8_t duration; uint32_t startTime; }; Valve(); void loop(); void addShiftRegister(ShiftRegister *shiftRegister); void add(uint8_t pinNum, bool shiftRegister); void open(uint8_t valveNumber, uint8_t minutes); void close(uint8_t valveNumber); void closeAll(); uint8_t getNumOfOpen(); uint16_t getTimeLeft(uint8_t valveNumber); private: void setValve(uint8_t valveNumber, bool state); ShiftRegister* shiftRegister = nullptr; ValveData valves[MAX_VALVES]; uint8_t valveCount = 0; uint16_t loopDelay = 1000; uint32_t loopLastMillis = 0; };