#pragma once #include "writepin.h" #include #include #include class Train { public: static const uint8_t M_DELTA = 0; static const uint8_t M_DIGITAL = 1; static const uint8_t HIGH = 2; static const uint8_t LOW = 1; static const uint8_t OFF = 0; private: uint8_t _address; uint8_t _function = 0; uint8_t _speed = 0; static const unsigned char _pinHighA = PD5; static const unsigned char _pinLowA = PD4; static const unsigned char _pinHighB = PD2; static const unsigned char _pinLowB = PD3; static const uint8_t SEND_COUNT = 2; uint8_t _protocol = M_DIGITAL; uint16_t lastDataPacket = 0; int8_t functionTimer = -1; inline static void off(); void sendBit(const bool bit); void sendAddress(); void functionClear(); public: static void setOutput(const uint8_t state); Train(const uint8_t address, uint8_t protocol = M_DIGITAL); Train(); void resendData(); void reverse(); void stop(); bool isActive(); uint8_t getAddress(); uint16_t getLastPacket(); uint8_t getProtocol(); void setSpeed(uint8_t speed); uint8_t getSpeed(); void setProtocol(const uint8_t protocol); void setAddress(const uint8_t address); void sendFunction(const uint8_t function, bool enable = true); void sendRaw(const uint16_t data); };