working with delta only

This commit is contained in:
IMback
2018-10-22 14:06:13 +02:00
parent 6ce1979727
commit 6a679f71ad
3 changed files with 108 additions and 70 deletions

View File

@ -8,8 +8,6 @@ Train::Train(const uint8_t address): _address(address)
Train::Train()
{
writePin(_port, _pinHigh, false);
writePin(_port, _pinLow, true);
_address = 0;
}
@ -23,24 +21,33 @@ uint8_t Train::getAddress()
return _address;
}
void Train::off()
{
writePin(_port, _pinHighA, false);
writePin(_port, _pinHighB, false);
writePin(_port, _pinLowA, true);
writePin(_port, _pinLowB, true);
}
void Train::setOutput(const uint8_t state)
{
if(state == HIGH)
{
writePin(_port, _pinLow, true);
off();
_delay_us(5);
writePin(_port, _pinHigh, true);
writePin(_port, _pinHighA, true);
writePin(_port, _pinLowB, false);
}
else if (state == LOW)
{
writePin(_port, _pinHigh, false);
off();
_delay_us(5);
writePin(_port, _pinLow, false);
writePin(_port, _pinHighB, true);
writePin(_port, _pinLowA, false);
}
else
{
writePin(_port, _pinHigh, false);
writePin(_port, _pinLow, true);
off();
}
}
@ -70,7 +77,7 @@ void Train::sendAddress()
}
}
void Train::sendData(const uint8_t data)
void Train::sendRaw(const uint8_t data)
{
for(uint8_t j = 0; j < SEND_COUNT; j++)
{
@ -78,7 +85,6 @@ void Train::sendData(const uint8_t data)
for(uint8_t i = 0; i < 5; i++)
{
sendBit(data & (1 << i));
sendBit(data & (1 << i));
}
_delay_ms(2);
}
@ -90,14 +96,14 @@ void Train::setSpeed(uint8_t speed)
if(speed <= 15)
{
lastSpeed = speed;
sendData(speed << 1);
sendData((speed << 1));
}
}
void Train::resendSpeed()
{
uint8_t data = lastSpeed;
sendData(data << 1);
sendData((data << 1));
}
uint8_t Train::getSpeed()
@ -107,10 +113,10 @@ uint8_t Train::getSpeed()
void Train::reverse()
{
sendData(1 << 1);
sendData((1 << 1));
}
void Train::sendFunction(const uint8_t function)
void Train::sendFunction(const uint16_t function)
{
sendData((function << 1) | 1);
sendDataUndoubled(function);
}