#include "item.h" #include static volatile unsigned char *_port = &PORTD; Item::Item(const uint8_t address): _address(address) { } void Item::setAddress(const uint8_t address) { _address = address; } uint8_t Item::getAddress() { return _address; } void Item::off() { writePin(_port, _pinHighA, false); writePin(_port, _pinHighB, false); writePin(_port, _pinLowA, true); writePin(_port, _pinLowB, true); } void Item::setOutput(const uint8_t state) { if(state == HIGH) { off(); _delay_us(3); writePin(_port, _pinHighA, true); writePin(_port, _pinLowB, false); } else if (state == LOW) { off(); _delay_us(3); writePin(_port, _pinHighB, true); writePin(_port, _pinLowA, false); } else { off(); } } void Item::sendBit(const bool bit) { if(bit) { setOutput(HIGH); _delay_us(170); setOutput(LOW); _delay_us(25); } else { setOutput(HIGH); _delay_us(20); setOutput(LOW); _delay_us(175); } } void Item::sendAddress(uint8_t address) { for(uint8_t i = 0; i < 8; i++) { sendBit(address & (1 << i)); } } void Item::sendRawAddr(const uint16_t address, const uint16_t data) { for(uint8_t j = 0; j < SEND_COUNT; j++) { sendAddress(address); for(uint8_t i = 0; i < 10; i++) { sendBit(data & (1 << i)); } _delay_ms(1); } } void Item::sendRaw(const uint16_t data) { sendRawAddr(_address, data); }