├── examples └── Blink │ └── Blink.ino ├── README.md ├── solight.h └── solight.cpp /examples/Blink/Blink.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | Solight solight(8); 4 | 5 | void setup() { 6 | } 7 | 8 | void loop() { 9 | solight.control(31, 'A', 1); 10 | delay(1000); 11 | solight.control(31, 'A', 0); 12 | delay(1000); 13 | } 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Solight Arduino library 2 | ======================= 3 | 4 | This library enables you to send RF commands to Solight DY01 sockets using 433MHz RF module. 5 | 6 | See example "Blink" - the code is self explaining. 7 | 8 | 9 | Authors 10 | ------- 11 | 12 | Signal analyzed by Matúš Pavelek 13 | Code written by Martin Habovštiak 14 | -------------------------------------------------------------------------------- /solight.h: -------------------------------------------------------------------------------- 1 | #ifndef SOLIGHT_H 2 | #define SOLIGHT_H 3 | 4 | #include "Arduino.h" 5 | 6 | class Solight { 7 | public: 8 | // If you set transmitCount to less than 2, it won't work! 9 | Solight(int pin, int transmitCount = 5); 10 | void control(uint16_t socketNumber, char state); 11 | void control(uint16_t channelNumber, char socketLetter, char state); 12 | private: 13 | void transmitBit(uint8_t b); 14 | int mPin, mTransmitCount; 15 | }; 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /solight.cpp: -------------------------------------------------------------------------------- 1 | #include "solight.h" 2 | 3 | Solight::Solight(int pin, int transmitCount) : 4 | mPin(pin), 5 | mTransmitCount(transmitCount) 6 | { 7 | pinMode(mPin, OUTPUT); 8 | } 9 | 10 | void Solight::transmitBit(uint8_t b) { 11 | digitalWrite(mPin, HIGH); 12 | delayMicroseconds(150 + 300*b); 13 | digitalWrite(mPin, LOW); 14 | delayMicroseconds(450 - 300*b); 15 | } 16 | 17 | void Solight::control(uint16_t socketNumber, char state) { 18 | uint16_t tmp; 19 | int i, j; 20 | for(j = 0; j < mTransmitCount; ++j) { 21 | tmp = socketNumber; 22 | // Channel number 23 | for(i = 0; i < 5; ++i) { 24 | transmitBit((tmp / 512) % 2); 25 | transmitBit(1); 26 | tmp *= 2; 27 | } 28 | transmitBit(0); 29 | // Socket ID 30 | for(i = 0; i < 5; ++i) { 31 | transmitBit((tmp / 512) % 2); 32 | transmitBit(0); 33 | tmp *= 2; 34 | } 35 | 36 | // State 37 | transmitBit(state); 38 | transmitBit(0); 39 | transmitBit(!state); 40 | transmitBit(0); 41 | delayMicroseconds(4600); 42 | } 43 | } 44 | 45 | void Solight::control(uint16_t channelNumber, char socketLetter, char state) { 46 | channelNumber *= 32; 47 | switch(socketLetter) { 48 | case 'A': 49 | case 'a': 50 | channelNumber += 31-16; 51 | break; 52 | case 'B': 53 | case 'b': 54 | channelNumber += 31-8; 55 | break; 56 | case 'C': 57 | case 'c': 58 | channelNumber += 31-4; 59 | break; 60 | case 'D': 61 | case 'd': 62 | channelNumber += 31-2; 63 | break; 64 | case 'E': 65 | case 'e': 66 | channelNumber += 31-1; 67 | break; 68 | } 69 | Serial.println(channelNumber); 70 | control(channelNumber, state); 71 | } 72 | --------------------------------------------------------------------------------