@@ -15,105 +15,156 @@ unsigned long timing; // Переменная для хранения точки
15
15
void IRAM_ATTR keyChangedOnPCF1 () {
16
16
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
17
17
keyChanged1 = true ;
18
- time_click1 = millis ();
18
+ time_click1 = millis ();
19
19
}
20
20
21
21
void IRAM_ATTR keyChangedOnPCF2 () {
22
22
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
23
23
keyChanged2 = true ;
24
- time_click2 = millis ();
24
+ time_click2 = millis ();
25
25
}
26
26
27
27
void IRAM_ATTR keyChangedOnPCF3 () {
28
28
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
29
29
keyChanged3 = true ;
30
- time_click3 = millis ();
30
+ time_click3 = millis ();
31
31
}
32
32
33
33
34
34
35
35
36
36
37
37
void loop_buttons () {
38
-
39
- if (millis () - timing > 10 ){ // Проверяем кнопки каждые 10мс
40
- timing = millis ();
41
-
42
- // если нет подключенного расширителя, то флаг состояния может сбрасываться при перезагрузке
43
- // чтобы исключить лишние тики неподключенных расширителей с ложными событиями, проверяем подключение
44
-
45
- // обработка выключателей
46
- if (((keyChanged1) || (millis () - time_click1 < 5000 )) && (In1Con)){ // при изменении входов первого расширителя или в течение 5 секунд после
47
- uint16_t di = in1.readButton16 (); // здесь состояния всех входов после изменения как 11100011110001, в прерывании эта функция вызывает перезагрузку
48
- // разбираем байты и тикаем виртуальные кнопки в цикле
49
- /*
50
- p0 = ((di & bit(0))>0)?HIGH:LOW;
51
- p1 = ((di & bit(1))>0)?HIGH:LOW;
52
- p2 = ((di & bit(2))>0)?HIGH:LOW;
53
- p3 = ((di & bit(3))>0)?HIGH:LOW;
54
- p4 = ((di & bit(4))>0)?HIGH:LOW;
55
- p5 = ((di & bit(5))>0)?HIGH:LOW;
56
- p6 = ((di & bit(6))>0)?HIGH:LOW;
57
- p7 = ((di & bit(7))>0)?HIGH:LOW;
58
- */
59
- for (uint8_t i = 0 ; i < 16 ; i++) { // тикаем первые 16 виртуальных кнопок, т.е. buttons[0-15]
60
- buttons[i].tick (((di & bit (i)) > 0 ) ? LOW : HIGH); // кнопки подтянуты к питанию и прижимаем к GND в нажатии, поэтому HIGH = отпущена
61
38
62
- // публикуем событие
63
- if (buttons[i].isHolded ()) { Serial.print (" holded " ); Serial.println (i+1 ); publishSwitchJsonState (i, " holded" );}
64
-
65
- if (buttons[i].isPress ()) {Serial.print (" press " ); Serial.println (i+1 ); publishSwitchJsonState (i, " press" ); TargetRelay[i] = ! StatusRelay[i];}
66
-
67
- if (buttons[i].hasClicks (1 )) {Serial.print (" click " ); Serial.println (i+1 ); publishSwitchJsonState (i, " click" );}
68
- if (buttons[i].hasClicks (2 )) {Serial.print (" 2 click " ); Serial.println (i+1 ); publishSwitchJsonState (i, " double" );}
69
-
70
- // if (buttons[i].hasClicks()) Serial.println(buttons[i].clicks);
71
- // if (buttons[i].isHold()) Serial.println("hold");
72
-
73
- } // for
74
-
75
- keyChanged1 = false ; // сбрасываем флаг изменённых входов расширителя
76
- } // if
77
-
78
-
79
- if (((keyChanged2) || (millis () - time_click2 < 5000 )) && (In2Con)) { // при изменении входов второго расширителя
80
- uint16_t di = in2.readButton16 (); // здесь состояния всех входов после изменения как 11100011110001
81
- for (uint8_t i = 0 ; i < 16 ; i++) { // тикаем вторые 16 виртуальных кнопок, т.е. buttons[16-31]
82
- buttons[i + 16 ].tick (((di & bit (i)) > 0 ) ? LOW : HIGH);
83
-
84
- // публикуем событие
85
- if (buttons[i+16 ].isHolded ()) { Serial.print (" holded " ); Serial.println (i+17 ); publishSwitchJsonState (i+16 , " holded" );}
86
-
87
- if (buttons[i+16 ].isPress ()) {Serial.print (" press " ); Serial.println (i+17 ); publishSwitchJsonState (i+16 , " press" ); TargetRelay[i+16 ] = ! StatusRelay[i+16 ];}
88
-
89
- if (buttons[i+16 ].hasClicks (1 )) {Serial.print (" click " ); Serial.println (i+17 ); publishSwitchJsonState (i+16 , " click" );}
90
- if (buttons[i+16 ].hasClicks (2 )) {Serial.print (" 2 click " ); Serial.println (i+17 ); publishSwitchJsonState (i+16 , " double" );}
91
-
92
- } // for
93
-
94
- keyChanged2 = false ; // сбрасываем флаг изменённых входов расширителя
95
-
96
- } // if
97
-
98
- if (((keyChanged3) || (millis () - time_click3 < 5000 )) && (In3Con)) { // при изменении входов третьего расширителя
99
- uint16_t di = in3.readButton16 (); // здесь состояния всех входов после изменения как 11100011110001
100
- for (uint8_t i = 0 ; i < 8 ; i++) { // тикаем последние 8 виртуальных кнопок, т.е. buttons[32-39]
101
- buttons[i + 32 ].tick (((di & bit (i)) > 0 ) ? LOW : HIGH);
102
-
103
- // публикуем событие
104
- if (buttons[i+32 ].isHolded ()) { Serial.print (" holded " ); Serial.println (i+33 ); publishSwitchJsonState (i+32 , " holded" );}
105
-
106
- if (buttons[i+32 ].isPress ()) {Serial.print (" press " ); Serial.println (i+33 ); publishSwitchJsonState (i+32 , " press" ); TargetRelay[i+32 ] = ! StatusRelay[i+32 ];}
107
-
108
- if (buttons[i+32 ].hasClicks (1 )) {Serial.print (" click " ); Serial.println (i+33 ); publishSwitchJsonState (i+32 , " click" );}
109
- if (buttons[i+32 ].hasClicks (2 )) {Serial.print (" 2 click " ); Serial.println (i+33 ); publishSwitchJsonState (i+32 , " double" );}
110
-
111
- } // for
112
-
113
- keyChanged3 = false ; // сбрасываем флаг изменённых входов расширителя
114
-
115
- } // if
116
-
117
- }
39
+ if (millis () - timing > 10 ) { // Проверяем кнопки каждые 10мс
40
+ timing = millis ();
41
+
42
+ // если нет подключенного расширителя, то флаг состояния может сбрасываться при перезагрузке
43
+ // чтобы исключить лишние тики неподключенных расширителей с ложными событиями, проверяем подключение
44
+
45
+ // обработка выключателей
46
+ if (((keyChanged1) || (millis () - time_click1 < 5000 )) && (In1Con)) { // при изменении входов первого расширителя или в течение 5 секунд после
47
+ uint16_t di = in1.readButton16 (); // здесь состояния всех входов после изменения как 11100011110001, в прерывании эта функция вызывает перезагрузку
48
+ // разбираем байты и тикаем виртуальные кнопки в цикле
49
+ /*
50
+ p0 = ((di & bit(0))>0)?HIGH:LOW;
51
+ p1 = ((di & bit(1))>0)?HIGH:LOW;
52
+ p2 = ((di & bit(2))>0)?HIGH:LOW;
53
+ p3 = ((di & bit(3))>0)?HIGH:LOW;
54
+ p4 = ((di & bit(4))>0)?HIGH:LOW;
55
+ p5 = ((di & bit(5))>0)?HIGH:LOW;
56
+ p6 = ((di & bit(6))>0)?HIGH:LOW;
57
+ p7 = ((di & bit(7))>0)?HIGH:LOW;
58
+ */
59
+ for (uint8_t i = 0 ; i < 16 ; i++) { // тикаем первые 16 виртуальных кнопок, т.е. buttons[0-15]
60
+ buttons[i].tick (((di & bit (i)) > 0 ) ? LOW : HIGH); // кнопки подтянуты к питанию и прижимаем к GND в нажатии, поэтому HIGH = отпущена
61
+
62
+ // публикуем событие
63
+ if (buttons[i].isHolded ()) {
64
+ Serial.print (" holded " );
65
+ Serial.println (i + 1 );
66
+ publishSwitchJsonState (i, " holded" );
67
+ }
68
+
69
+ if (buttons[i].isPress ()) {
70
+ Serial.print (" press " );
71
+ Serial.println (i + 1 );
72
+ publishSwitchJsonState (i, " press" );
73
+ TargetRelay[i] = ! StatusRelay[i];
74
+ }
75
+
76
+ if (buttons[i].hasClicks (1 )) {
77
+ Serial.print (" click " );
78
+ Serial.println (i + 1 );
79
+ publishSwitchJsonState (i, " click" );
80
+ }
81
+ if (buttons[i].hasClicks (2 )) {
82
+ Serial.print (" 2 click " );
83
+ Serial.println (i + 1 );
84
+ publishSwitchJsonState (i, " double" );
85
+ }
86
+
87
+ // if (buttons[i].hasClicks()) Serial.println(buttons[i].clicks);
88
+ // if (buttons[i].isHold()) Serial.println("hold");
89
+
90
+ } // for
91
+
92
+ keyChanged1 = false ; // сбрасываем флаг изменённых входов расширителя
93
+ } // if
94
+
95
+
96
+ if (((keyChanged2) || (millis () - time_click2 < 5000 )) && (In2Con)) { // при изменении входов второго расширителя
97
+ uint16_t di = in2.readButton16 (); // здесь состояния всех входов после изменения как 11100011110001
98
+ for (uint8_t i = 0 ; i < 16 ; i++) { // тикаем вторые 16 виртуальных кнопок, т.е. buttons[16-31]
99
+ buttons[i + 16 ].tick (((di & bit (i)) > 0 ) ? LOW : HIGH);
100
+
101
+ // публикуем событие
102
+ if (buttons[i + 16 ].isHolded ()) {
103
+ Serial.print (" holded " );
104
+ Serial.println (i + 17 );
105
+ publishSwitchJsonState (i + 16 , " holded" );
106
+ }
107
+
108
+ if (buttons[i + 16 ].isPress ()) {
109
+ Serial.print (" press " );
110
+ Serial.println (i + 17 );
111
+ publishSwitchJsonState (i + 16 , " press" );
112
+ TargetRelay[i + 16 ] = ! StatusRelay[i + 16 ];
113
+ }
114
+
115
+ if (buttons[i + 16 ].hasClicks (1 )) {
116
+ Serial.print (" click " );
117
+ Serial.println (i + 17 );
118
+ publishSwitchJsonState (i + 16 , " click" );
119
+ }
120
+ if (buttons[i + 16 ].hasClicks (2 )) {
121
+ Serial.print (" 2 click " );
122
+ Serial.println (i + 17 );
123
+ publishSwitchJsonState (i + 16 , " double" );
124
+ }
125
+
126
+ } // for
127
+
128
+ keyChanged2 = false ; // сбрасываем флаг изменённых входов расширителя
129
+
130
+ } // if
131
+
132
+ if (((keyChanged3) || (millis () - time_click3 < 5000 )) && (In3Con)) { // при изменении входов третьего расширителя
133
+ uint16_t di = in3.readButton16 (); // здесь состояния всех входов после изменения как 11100011110001
134
+ for (uint8_t i = 0 ; i < 8 ; i++) { // тикаем последние 8 виртуальных кнопок, т.е. buttons[32-39]
135
+ buttons[i + 32 ].tick (((di & bit (i)) > 0 ) ? LOW : HIGH);
136
+
137
+ // публикуем событие
138
+ if (buttons[i + 32 ].isHolded ()) {
139
+ Serial.print (" holded " );
140
+ Serial.println (i + 33 );
141
+ publishSwitchJsonState (i + 32 , " holded" );
142
+ }
143
+
144
+ if (buttons[i + 32 ].isPress ()) {
145
+ Serial.print (" press " );
146
+ Serial.println (i + 33 );
147
+ publishSwitchJsonState (i + 32 , " press" );
148
+ TargetRelay[i + 32 ] = ! StatusRelay[i + 32 ];
149
+ }
150
+
151
+ if (buttons[i + 32 ].hasClicks (1 )) {
152
+ Serial.print (" click " );
153
+ Serial.println (i + 33 );
154
+ publishSwitchJsonState (i + 32 , " click" );
155
+ }
156
+ if (buttons[i + 32 ].hasClicks (2 )) {
157
+ Serial.print (" 2 click " );
158
+ Serial.println (i + 33 );
159
+ publishSwitchJsonState (i + 32 , " double" );
160
+ }
161
+
162
+ } // for
163
+
164
+ keyChanged3 = false ; // сбрасываем флаг изменённых входов расширителя
165
+
166
+ } // if
167
+
168
+ }
118
169
} // loop
119
170
#endif
0 commit comments