/* * © 2024, Chris Harlow. All rights reserved. * * This file is part of EX-CommandStation * * This is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * It is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CommandStation. If not, see . */ /* * The IO_EncoderThrottle device driver uses a rotary encoder connected to vpins * to drive a loco. * Loco id is selected by writeAnalog. */ #ifndef IO_EncoderThrottle_H #define IO_EncoderThrottle_H #include "IODevice.h" class EncoderThrottle : public IODevice { public: static void create(VPIN firstVpin, int dtPin, int clkPin, int clickPin, byte notch=10); private: int _dtPin,_clkPin,_clickPin, _locoid, _notch,_prevpinstate; enum {xrSTOP,xrFWD,xrREV} _stopState; byte _rocoState; // Constructor EncoderThrottle(VPIN firstVpin, int dtPin, int clkPin, int clickPin, byte notch); void _loop(unsigned long currentMicros) override ; // Selocoid as analog value to start drive // use void _writeAnalogue(VPIN vpin, int value, uint8_t param1, uint16_t param2) override; void _display() override ; }; #endif