1
+ /* Switch Klik aan/Klik uit switches transmitter
2
+ * Usage: switchKaku(int pin, unsigned long id, int group, int dev, bool state, int repeat)
3
+ * pin = pin number
4
+ * id = unique id of transmitter (max 4194303)
5
+ * group = between 1 and 4,
6
+ * device = between 1 and 4, -1 switches the entire group
7
+ * state = true (on) or false (off)
8
+ * repeat = transmit repeats
9
+ * dimlevel = -1 (no dimmer), between 0 and 15 for the dimlevel
10
+ */
11
+ #include " switchKaKu.h"
12
+
13
+ void switchKaku (int pin, unsigned long id, int group, int dev, bool state, int repeat, int dimlevel){
14
+ if (dev == -1 ){
15
+ dev = 1 <<5 ;
16
+ } else {
17
+ dev -= 1 ;
18
+ }
19
+ if (dimlevel == -1 ) {
20
+ sendKakuCode (pin, ((id<<6 |dev)|state<<4 )|(group-1 )<<2 , repeat);
21
+ } else {
22
+ sendKakuDimCode (pin, id, (((dev<<4 )|state<<8 )|(group-1 )<<6 )|dimlevel, repeat);
23
+ }
24
+ }
25
+
26
+ void sendKakuCode (int pin, unsigned long code, int repeat){
27
+ int period = 230 ;
28
+ pinMode (pin, OUTPUT);
29
+ for (int j = 0 ; j < repeat; j++){
30
+ sendSyc (pin, period);
31
+ for (int i = 31 ; i>=0 ; i--){
32
+ sendBit (((code & (1 <<i))==(1 <<i)), pin, period);
33
+ }
34
+ digitalWrite (pin,HIGH);
35
+ delayMicroseconds (period);
36
+ digitalWrite (pin, LOW);
37
+ }
38
+ }
39
+
40
+ void sendKakuDimCode (int pin, unsigned long id, unsigned long code, int repeat){
41
+ int period = 230 ;
42
+ pinMode (pin, OUTPUT);
43
+ for (int j = 0 ; j < repeat; j++){
44
+ sendSyc (pin, period);
45
+ for (int i = 25 ; i>=0 ; i--){
46
+ sendBit (((id & (1 <<i))==(1 <<i)), pin, period);
47
+ }
48
+ for (int i = 9 ; i>=0 ; i--){
49
+ if (i == 8 ) {
50
+ sendBit (-1 , pin, period);
51
+ } else {
52
+ sendBit (((code & (1 <<i))==(1 <<i)), pin, period);
53
+ }
54
+ }
55
+ digitalWrite (pin,HIGH);
56
+ delayMicroseconds (period);
57
+ digitalWrite (pin, LOW);
58
+ };
59
+ }
60
+
61
+
62
+ void sendSyc (int pin, int period){
63
+ digitalWrite (pin, LOW);
64
+ delayMicroseconds (47 *period);
65
+ digitalWrite (pin,HIGH);
66
+ delayMicroseconds (period);
67
+ digitalWrite (pin, LOW);
68
+ delayMicroseconds (period*12 );
69
+
70
+ }
71
+
72
+ void sendBit (int value, int pin, int period){
73
+ if (value == 0 ){
74
+ digitalWrite (pin,HIGH);
75
+ delayMicroseconds (period);
76
+ digitalWrite (pin, LOW);
77
+ delayMicroseconds (period*1.4 );
78
+ digitalWrite (pin,HIGH);
79
+ delayMicroseconds (period);
80
+ digitalWrite (pin, LOW);
81
+ delayMicroseconds (period*6 );
82
+ } else if (value == 1 ) {
83
+ digitalWrite (pin,HIGH);
84
+ delayMicroseconds (period);
85
+ digitalWrite (pin, LOW);
86
+ delayMicroseconds (period*6 );
87
+ digitalWrite (pin,HIGH);
88
+ delayMicroseconds (period);
89
+ digitalWrite (pin, LOW);
90
+ delayMicroseconds (period*1.4 );
91
+ } else {
92
+ digitalWrite (pin,HIGH);
93
+ delayMicroseconds (period);
94
+ digitalWrite (pin, LOW);
95
+ delayMicroseconds (period*1.4 );
96
+ digitalWrite (pin,HIGH);
97
+ delayMicroseconds (period);
98
+ digitalWrite (pin, LOW);
99
+ delayMicroseconds (period*1.4 );
100
+ }
101
+ }
0 commit comments