diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e95ce1 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +Solight Arduino library +======================= + +This library enables you to send RF commands to Solight DY01 sockets using 433MHz RF module. + +See example "Blink" - the code is self explaining. diff --git a/examples/Blink/Blink.ino b/examples/Blink/Blink.ino new file mode 100644 index 0000000..a408d4c --- /dev/null +++ b/examples/Blink/Blink.ino @@ -0,0 +1,13 @@ +#include + +Solight solight(8); + +void setup() { +} + +void loop() { + solight.control(31, 'A', 1); + delay(1000); + solight.control(31, 'A', 0); + delay(1000); +} diff --git a/solight.cpp b/solight.cpp new file mode 100644 index 0000000..465f1c5 --- /dev/null +++ b/solight.cpp @@ -0,0 +1,71 @@ +#include "solight.h" + +Solight::Solight(int pin, int transmitCount) : + mPin(pin), + mTransmitCount(transmitCount) +{ + pinMode(mPin, OUTPUT); +} + +void Solight::transmitBit(uint8_t b) { + digitalWrite(mPin, HIGH); + delayMicroseconds(150 + 300*b); + digitalWrite(mPin, LOW); + delayMicroseconds(450 - 300*b); +} + +void Solight::control(uint16_t socketNumber, char state) { + uint16_t tmp; + int i, j; + for(j = 0; j < mTransmitCount; ++j) { + tmp = socketNumber; + // Channel number + for(i = 0; i < 5; ++i) { + transmitBit((tmp / 512) % 2); + transmitBit(1); + tmp *= 2; + } + transmitBit(0); + // Socket ID + for(i = 0; i < 5; ++i) { + transmitBit((tmp / 512) % 2); + transmitBit(0); + tmp *= 2; + } + + // State + transmitBit(state); + transmitBit(0); + transmitBit(!state); + transmitBit(0); + delayMicroseconds(4600); + } +} + +void Solight::control(uint16_t channelNumber, char socketLetter, char state) { + channelNumber *= 32; + switch(socketLetter) { + case 'A': + case 'a': + channelNumber += 31-16; + break; + case 'B': + case 'b': + channelNumber += 31-8; + break; + case 'C': + case 'c': + channelNumber += 31-4; + break; + case 'D': + case 'd': + channelNumber += 31-2; + break; + case 'E': + case 'e': + channelNumber += 31-1; + break; + } + Serial.println(channelNumber); + control(channelNumber, state); +} diff --git a/solight.h b/solight.h new file mode 100644 index 0000000..09b20ca --- /dev/null +++ b/solight.h @@ -0,0 +1,17 @@ +#ifndef SOLIGHT_H +#define SOLIGHT_H + +#include "Arduino.h" + +class Solight { + public: + // If you set transmitCount to less than 2, it won't work! + Solight(int pin, int transmitCount = 5); + void control(uint16_t socketNumber, char state); + void control(uint16_t channelNumber, char socketLetter, char state); + private: + void transmitBit(uint8_t b); + int mPin, mTransmitCount; +}; + +#endif