74 lines
1.5 KiB
C++
74 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "writepin.h"
|
|
#include <util/delay.h>
|
|
#include <stdint.h>
|
|
#include <avr/io.h>
|
|
|
|
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);
|
|
|
|
};
|