/** * @file RelayController.h * @brief Relay control for switching between 2-rail and 3-rail track configurations * * Controls a relay module to switch track wiring between: * - 2-rail mode: Standard DC/DCC operation * - 3-rail mode: Center rail + outer rails configuration * * @author Locomotive Test Bench Project * @date 2025 */ #ifndef RELAY_CONTROLLER_H #define RELAY_CONTROLLER_H #include // Pin definition for relay control #define RELAY_PIN 4 ///< Relay control pin (active HIGH) /** * @class RelayController * @brief Controls relay for track configuration switching * * Simple relay control for switching between 2-rail and 3-rail modes. * Relay energized = 3-rail mode * Relay de-energized = 2-rail mode */ class RelayController { public: /** * @brief Constructor */ RelayController(); /** * @brief Initialize relay controller hardware * * Configures GPIO pin and sets to default 2-rail mode. */ void begin(); /** * @brief Set rail mode * @param is3Rail true = 3-rail mode, false = 2-rail mode */ void setRailMode(bool is3Rail); /** * @brief Get current rail mode * @return true if 3-rail mode, false if 2-rail mode */ bool is3RailMode() { return is3Rail; } private: bool is3Rail; ///< Current rail mode state }; #endif // RELAY_CONTROLLER_H