/* * NewRemoteSwitch library v1.2.0 (20140128) made by Randy Simons http://randysimons.nl/ * See NewRemoteTransmitter.h for details. * * License: GPLv3. See license.txt */ #include "NewRemoteTransmitter.h" NewRemoteTransmitter::NewRemoteTransmitter(unsigned long address, uint8_t pin, unsigned int periodusec, uint8_t repeats) { _address = address; _pin = pin; _periodusec = periodusec; _repeats = (1 << repeats) - 1; // I.e. _repeats = 2^repeats - 1 pinMode(_pin, OUTPUT); } void NewRemoteTransmitter::sendGroup(bool switchOn) { for (int8_t i = _repeats; i >= 0; i--) { _sendStartPulse(); _sendAddress(); // Do send group bit _sendBit(true); // Switch on | off _sendBit(switchOn); // No unit. Is this actually ignored?.. _sendUnit(0); _sendStopPulse(); } } void NewRemoteTransmitter::sendUnit(uint8_t unit, bool switchOn) { for (int8_t i = _repeats; i >= 0; i--) { _sendStartPulse(); _sendAddress(); // No group bit _sendBit(false); // Switch on | off _sendBit(switchOn); _sendUnit(unit); _sendStopPulse(); } } void NewRemoteTransmitter::sendDim(uint8_t unit, uint8_t dimLevel) { for (int8_t i = _repeats; i >= 0; i--) { _sendStartPulse(); _sendAddress(); // No group bit _sendBit(false); // Switch type 'dim' digitalWrite(_pin, HIGH); delayMicroseconds(_periodusec); digitalWrite(_pin, LOW); delayMicroseconds(_periodusec); digitalWrite(_pin, HIGH); delayMicroseconds(_periodusec); digitalWrite(_pin, LOW); delayMicroseconds(_periodusec); _sendUnit(unit); for (int8_t j=3; j>=0; j--) { _sendBit(dimLevel & 1<= 0; i--) { _sendStartPulse(); _sendAddress(); // No group bit _sendBit(true); // Switch type 'dim' digitalWrite(_pin, HIGH); delayMicroseconds(_periodusec); digitalWrite(_pin, LOW); delayMicroseconds(_periodusec); digitalWrite(_pin, HIGH); delayMicroseconds(_periodusec); digitalWrite(_pin, LOW); delayMicroseconds(_periodusec); _sendUnit(0); for (int8_t j=3; j>=0; j--) { _sendBit(dimLevel & 1<> 1)); // Actually 10.5T insteat of 10.44T. Close enough. } void NewRemoteTransmitter::_sendAddress() { for (int8_t i=25; i>=0; i--) { _sendBit((_address >> i) & 1); } } void NewRemoteTransmitter::_sendUnit(uint8_t unit) { for (int8_t i=3; i>=0; i--) { _sendBit(unit & 1<