Rev 2153 Rev 2231
1 /* 1 /*
2 Ovladani domu rozvadec 2. n.p. 2 Ovladani domu rozvadec 2. n.p.
3   3  
4 Syntaxe prikazu: 4 Syntaxe prikazu:
5   5  
6 <Roleta/Svetlo><#patro><#mistnost><Nord/Jih/Vychod/Zapad/A/B><Up/Down> 6 <Roleta/Svetlo><#patro><#mistnost><Nord/Jih/Vychod/Zapad/A/B><Up/Down>
7 R2aNU - roleta, 2. n.p., mistnost 10, sever, nahoru 7 R2aNU - roleta, 2. n.p., mistnost 10, sever, nahoru
8 S12A - svetlo, 1. n.p., mistnost 2, prostredni 8 S12A - svetlo, 1. n.p., mistnost 2, prostredni
9   9  
10 Rozmisteni desek: 10 Rozmisteni desek:
11   11  
12 [CAN] 12 [CAN]
13 [IN J] [IN D] 13 [IN J] [IN D]
14 [OUT A] [CPU] 14 [OUT A] [CPU]
15   15  
16 [OUT F] [OUT B] [OUT E] 16 [OUT F] [OUT B] [OUT E]
17   17  
18 */ 18 */
19 #include "main.h" 19 #include "main.h"
20   20  
21 #case 21 #case
22 #use fast_io(A) // Aby se neztracely znaky pri cteni prikazu 22 #use fast_io(A) // Aby se neztracely znaky pri cteni prikazu
23 #use fast_io(B) 23 #use fast_io(B)
24 #use fast_io(E) 24 #use fast_io(E)
25 #use fast_io(F) 25 #use fast_io(F)
26 #use fast_io(D) 26 #use fast_io(D)
27 #use fast_io(J) 27 #use fast_io(J)
28   28  
-   29 #define T_REVERS 5 // 5*256 ms = 1,25 s; pred prepnutim rele (zastaveni motoru a vybiti kondenzatoru)
29 #define REVERS 3 // 3*256 ms = 0,75 s 30 #define T_START 1 // 256 ms; po prepnuti rele do sepnuti triaku
30 #define GO 117 // 117*256 ms = 30 s 31 #define T_GO 117 // 117*256 ms = 30 s; max. beh rolety
31 #define GO_ZALUZIE 6 // cca 1,5 s 32 #define T_GO_ZALUZIE 6 // cca 1,5 s; beh zaluzie (pouze na preklopeni lamel)
32 #define RECEIVE 10 // cca 2,6 s 33 #define T_RECEIVE 10 // cca 2,6 s
33 #define ZAKMIT 2000 // pocet pruchodu hlavni smyckou pred opetovnou detekci prepnuti vypinace 34 #define ZAKMIT 2000 // pocet pruchodu hlavni smyckou pred opetovnou detekci prepnuti vypinace
34   35  
-   36 #define OR106Z PIN_A0 // t1 Zaluzie trucovna zapad
35 #define OR110NU PIN_A0 // t1 Zaluzie koupelna dole 37 #define OR110N PIN_A1 // t2 Zaluzie koupelna dole sever
-   38 #define OR104V PIN_A2 // t3 Roleta lab vychod
-   39 #define OR104J PIN_A3 // t4 Roleta lab jih
36 #define OR110ND PIN_A1 // t2 40 #define OR103V PIN_A4 // t5 Roleta loznice
-   41 #define OR202J PIN_A5 // t6 Roleta Kaklik
-   42 #define OR204Z PIN_A6 // t7 Roleta radiomistnost
37 #define OR207VU PIN_A2 // t3 Roleta klubovna 43 #define OR207V PIN_A7 // t8 Roleta klubovna
-   44  
-   45 #define OR208V PIN_F0 // t1 Roleta Zizala vychod
-   46 #define OR208J PIN_F1 // t2 Roleta Zizala jih
-   47 //??? #define OR107 PIN_F2 // t3
38 #define OR207VD PIN_A3 // t4 48 //??? #define OR107 PIN_F3 // t4
39 #define OR103VU PIN_A4 // t5 Roleta loznice 49 #define OR201Z PIN_F4 // t5 Roleta chodba nahore
40 #define OR103VD PIN_A5 // t6 50 #define OR205N PIN_F5 // t6 Roleta puda
41 #define OR104JU PIN_A6 // t7 Roleta laborator jih 51 //??? #define OR105 PIN_F6 // t7 Roleta kuchyn
42 #define OR104JD PIN_A7 // t8 52 //#define O... PIN_F7 // t8
-   53  
43   54  
44 #define OS103J PIN_B0 // t1 Svetla loznice 55 #define OS103J PIN_B0 // t1 Svetla loznice
45 #define OS105Z PIN_B1 // t2 Svetlo kuchyn nad lavici 56 #define OS105Z PIN_B1 // t2 Svetlo kuchyn nad lavici
46 #define OS110N PIN_B2 // t3 Svetlo koupelna dole zachod a sprhca 57 #define OS110N PIN_B2 // t3 Svetlo koupelna dole zachod a sprhca
47 #define OS106A PIN_B3 // t4 Svetlo trucovna stred 58 #define OS106A PIN_B3 // t4 Svetlo trucovna stred
48 #define OS107A PIN_B4 // t5 Svetlo satna 59 #define OS107A PIN_B4 // t5 Svetlo satna
49 #define OS109A PIN_B5 // t6 Svetlo technologicka mistnost 60 #define OS109A PIN_B5 // t6 Svetlo technologicka mistnost
50 #define OS205A PIN_B6 // t7 Svetlo puda 61 #define OS205A PIN_B6 // t7 Svetlo puda
51 #define OS204A PIN_B7 // t8 Svetlo radiomistnost 62 #define OS204A PIN_B7 // t8 Svetlo radiomistnost
52   63  
53 //#define OS105C PIN_C2 64 //#define OS105C PIN_C2
54 //#define PIN_C3 31763 65 //#define PIN_C3 31763
55 //#define PIN_C4 31764 66 //#define PIN_C4 31764
56 //#define PIN_C5 31765 67 //#define PIN_C5 31765
57 //#define PIN_C6 31766 //TX 68 //#define PIN_C6 31766 //TX
58 //#define PIN_C7 31767 //RX 69 //#define PIN_C7 31767 //RX
59   70  
60 #define OS102A PIN_E0 // t1 Svetlo chodba 71 #define OS102A PIN_E0 // t1 Svetlo chodba
61 #define OS105A PIN_E1 // t2 Svetlo kuchyne stred 72 #define OS105A PIN_E1 // t2 Svetlo kuchyne stred
62 #define OS207A PIN_E2 // t3 Svetlo klubovna 73 #define OS207A PIN_E2 // t3 Svetlo klubovna
63 #define OS104A PIN_E3 // t4 Svetlo laborator 74 #define OS104A PIN_E3 // t4 Svetlo laborator
64 #define OS202A PIN_E4 // t5 Svetlo Kaklik stred 75 #define OS202A PIN_E4 // t5 Svetlo Kaklik stred
65 #define OS209A PIN_E5 // t6 Svetlo Zizala koupelna 76 #define OS209A PIN_E5 // t6 Svetlo Zizala koupelna
66 #define OS203A PIN_E6 // t7 Svetlo Kaklik koupelna 77 #define OS203A PIN_E6 // t7 Svetlo Kaklik koupelna
67 //#define O... PIN_E7 // t8 -  
68   -  
69 #define OR104VU PIN_F0 // t1 Roleta laborator vychod -  
70 #define OR104VD PIN_F1 // t2 -  
71 #define OR202JU PIN_F2 // t3 Roleta Kaklik -  
72 #define OR202JD PIN_F3 // t4 -  
73 #define OR204ZU PIN_F4 // t5 Roleta radiomistnost 78 #define RE PIN_E7 // t8 Rele pro rizeni smeru rolet
74 #define OR204ZD PIN_F5 // t6 -  
75 //#define O... PIN_F6 // t7 -  
76 //#define O... PIN_F7 // t8 -  
77   79  
78 //#define I.... input(PIN_D0) // A 80 //#define I.... input(PIN_D0) // A
79 #define IS201AZ input(PIN_D1) // B Vypinac chodba 2.n.p. zapad u Kaklika 81 #define IS201AZ input(PIN_D1) // B Vypinac chodba 2.n.p. zapad u Kaklika
80 #define IS207AJ input(PIN_D2) // C Vypinac klubovna 82 #define IS207AJ input(PIN_D2) // C Vypinac klubovna
81 #define IR207VD input(PIN_D3) // D Vypinac roleta klubovna dolu 83 #define IR207VD input(PIN_D3) // D Vypinac roleta klubovna dolu
82 #define IR207VU input(PIN_D4) // E Vypinac roleta klubovna nahoru 84 #define IR207VU input(PIN_D4) // E Vypinac roleta klubovna nahoru
83 #define IS201AV input(PIN_D5) // F Vypinac chodba 2.n.p. vychod 85 #define IS201AV input(PIN_D5) // F Vypinac chodba 2.n.p. vychod
84 #define IS209AJ input(PIN_D6) // G Vypinac koupelna Zizala 86 #define IS209AJ input(PIN_D6) // G Vypinac koupelna Zizala
85 #define IS203AJ input(PIN_D7) // H Vypinac koupelna Kaklik 87 #define IS203AJ input(PIN_D7) // H Vypinac koupelna Kaklik
86   88  
87 #define IS202AN input(PIN_J0) // A Vypinac svetlo Kaklik stred u dveri na chodbu 89 #define IS202AN input(PIN_J0) // A Vypinac svetlo Kaklik stred u dveri na chodbu
88 #define IR202ND input(PIN_J1) // B Vypinac roleta Kaklik dolu u dveri 90 #define IR202ND input(PIN_J1) // B Vypinac roleta Kaklik dolu u dveri
89 #define IR202NU input(PIN_J2) // C Vypinac roleta Kaklik nahoru u dveri 91 #define IR202NU input(PIN_J2) // C Vypinac roleta Kaklik nahoru u dveri
90 #define IS205A input(PIN_J3) // D Vypinac svetlo puda 92 #define IS205A input(PIN_J3) // D Vypinac svetlo puda
91 #define IS204AJ input(PIN_J4) // E Vypinac svetlo radiomistnost u dveri na chodbu 93 #define IS204AJ input(PIN_J4) // E Vypinac svetlo radiomistnost u dveri na chodbu
92 #define IR204ZD input(PIN_J5) // F Vypinac roleta radiomistnost dolu 94 #define IR204ZD input(PIN_J5) // F Vypinac roleta radiomistnost dolu
93 #define IR204ZU input(PIN_J6) // G Vypinac roleta radiomistnost nahoru 95 #define IR204ZU input(PIN_J6) // G Vypinac roleta radiomistnost nahoru
94 //#define I.... input(PIN_J7) // H 96 //#define I.... input(PIN_J7) // H
95   97  
96 int1 s201AV; 98 int1 s201AV;
97 int1 s201AZ; 99 int1 s201AZ;
98 int1 s207AJ; 100 int1 s207AJ;
99 int1 s203AJ; 101 int1 s203AJ;
100 int1 s209AJ; 102 int1 s209AJ;
101 int1 r207VU; 103 int1 r207VU;
102 int1 r207VD; 104 int1 r207VD;
103 int1 s202AN; 105 int1 s202AN;
104 int1 r202ND; 106 int1 r202ND;
105 int1 r202NU; 107 int1 r202NU;
106 int1 s205A; 108 int1 s205A;
107 int1 s204AJ; 109 int1 s204AJ;
108 int1 r204ZD; 110 int1 r204ZD;
109 int1 r204ZU; 111 int1 r204ZU;
110   112  
111 #bit CREN = 0xFAB.4 // USART enable register 113 #bit CREN = 0xFAB.4 // USART enable register
112   114  
113 #define LED1 PIN_C0 115 #define LED1 PIN_C0
114 #define LED2 PIN_C1 116 #define LED2 PIN_C1
115   117  
116 #define ON(port) output_low(port); 118 #define ON(port) output_low(port);
117 #define OFF(port) output_high(port); 119 #define OFF(port) output_high(port);
118   120  
-   121 typedef enum {RUN, STOP} roleta_state;
-   122 roleta_state rol[18]; // Stavy rolet
-   123 #define R103V 0
-   124 #define R110N 1
-   125 #define R104V 2
-   126 #define R104J 3
-   127 #define R207V 4
-   128 #define R202J 5
-   129 #define R204Z 6
-   130  
119 typedef enum {GO_UP, GO_DOWN, REVERS_UP, REVERS_DOWN, STOP} state; 131 typedef enum {UP, DOWN, REVERS_UP, REVERS_DOWN, RUN_UP, RUN_DOWN} relay_state;
-   132 relay_state relay; // Stavy rele
120   133  
121 state r103V, r110N, r104V, r104J, r207V, r202J, r204Z; // Stavy rolet 134 int8 timer_run; // Bezpecnostni casovac behu rolety
-   135 int8 timer_run_zaluzie; // Casovac zaluzie na preklopeni lamel
-   136 int8 timer_revers; // Prodleva na vybiti kondenzatoru pa zastaveni rolety pred prepnutim rele
122 int8 tr103V, tr110N, tr104V, tr104J, tr207V, tr202J, tr204Z; // Casovace rolet 137 int8 timer_start; // Prodleva na prepnuti rele pred startem rolety
123 int8 timer; // Casovac komunikace 138 int8 timer; // Casovac komunikace
124   139  
125 #int_TIMER0 140 #int_TIMER0
126 void TIMER0_isr(void) 141 void TIMER0_isr(void)
127 { 142 {
128 if(tr103V>0) tr103V--; -  
129 if(tr110N>0) tr110N--; -  
130 if(tr104V>0) tr104V--; -  
131 if(tr104J>0) tr104J--; -  
132 if(tr207V>0) tr207V--; -  
133 if(tr202J>0) tr202J--; -  
134 if(tr204Z>0) tr204Z--; -  
135 if(timer>0) timer--; 143 if(timer>0) timer--;
-   144 if(timer_run>0) timer_run--;
-   145 if(timer_revers>0) timer_revers--;
-   146 if(timer_start>0) timer_start--;
-   147 if(timer_run_zaluzie>0) timer_run_zaluzie--;
136 output_toggle(LED2); 148 output_toggle(LED2);
137 } 149 }
138   150  
-   151 void stop_all() // Zastav vsechny rolety
-   152 {
-   153 int8 n;
-   154
-   155 for(n=0; n<18; n++) rol[n]=STOP;
-   156 output_a(0xFF);
-   157 output_f(0xFF);
-   158 }
-   159  
-   160 void run_all() // Spust rolety
-   161 {
-   162 if (rol[R103V]==RUN) ON(OR103V);
-   163 if (rol[R110N]==RUN) ON(OR110N);
-   164 if (rol[R104V]==RUN) ON(OR104V);
-   165 if (rol[R104J]==RUN) ON(OR104J);
-   166 if (rol[R207V]==RUN) ON(OR207V);
-   167 if (rol[R202J]==RUN) ON(OR202J);
-   168 if (rol[R204Z]==RUN) ON(OR204Z);
-   169 }
-   170  
-   171 /*
139 void up(state *status, int8 *timer) // Zmena stavu rolety smer nahoru 172 void up(state *status, int8 *timer) // Zmena stavu rolety smer nahoru
140 { 173 {
141 switch (*status) 174 switch (*status)
142 { 175 {
143 case STOP: 176 case STOP:
144 case GO_DOWN: 177 case GO_DOWN:
145 *status=REVERS_UP; 178 *status=REVERS_UP;
146 *timer=REVERS; 179 *timer=REVERS;
147 break; 180 break;
148 case REVERS_UP: 181 case REVERS_UP:
149 case GO_UP: 182 case GO_UP:
150 *status=STOP; 183 *status=STOP;
151 *timer=0; 184 *timer=0;
152 break; 185 break;
153 } 186 }
154 } 187 }
155   188  
156 void down(state *status, int8 *timer) // Zmena stavu rolety smer dolu 189 void down(state *status, int8 *timer) // Zmena stavu rolety smer dolu
157 { 190 {
158 switch (*status) 191 switch (*status)
159 { 192 {
160 case STOP: 193 case STOP:
161 case GO_UP: 194 case GO_UP:
162 *status=REVERS_DOWN; 195 *status=REVERS_DOWN;
163 *timer=REVERS; 196 *timer=REVERS;
164 break; 197 break;
165 case REVERS_DOWN: 198 case REVERS_DOWN:
166 case GO_DOWN: 199 case GO_DOWN:
167 *status=STOP; 200 *status=STOP;
168 *timer=0; 201 *timer=0;
169 break; 202 break;
170 } 203 }
171 } 204 }
172   205  
173 #define run(x) { \ 206 #define run(x) { \
174 switch(r##x) \ 207 switch(r##x) \
175 { \ 208 { \
176 case STOP: \ 209 case STOP: \
177 OFF(OR##x##U); \ 210 OFF(OR##x##U); \
178 OFF(OR##x##D); \ 211 OFF(OR##x##D); \
179 break; \ 212 break; \
180 case GO_UP: \ 213 case GO_UP: \
181 OFF(OR##x##D); \ 214 OFF(OR##x##D); \
182 ON(OR##x##U); \ 215 ON(OR##x##U); \
183 if(tr##x==0) {r##x=STOP;} \ 216 if(tr##x==0) {r##x=STOP;} \
184 break; \ 217 break; \
185 case GO_DOWN: \ 218 case GO_DOWN: \
186 OFF(OR##x##U); \ 219 OFF(OR##x##U); \
187 ON(OR##x##D); \ 220 ON(OR##x##D); \
188 if(tr##x==0) {r##x=STOP;} \ 221 if(tr##x==0) {r##x=STOP;} \
189 break; \ 222 break; \
190 case REVERS_UP: \ 223 case REVERS_UP: \
191 OFF(OR##x##U); \ 224 OFF(OR##x##U); \
192 OFF(OR##x##D); \ 225 OFF(OR##x##D); \
193 if(tr##x==0) {r##x=GO_UP; tr##x=GO;} \ 226 if(tr##x==0) {r##x=GO_UP; tr##x=GO;} \
194 break; \ 227 break; \
195 case REVERS_DOWN: \ 228 case REVERS_DOWN: \
196 OFF(OR##x##U); \ 229 OFF(OR##x##U); \
197 OFF(OR##x##D); \ 230 OFF(OR##x##D); \
198 if(tr##x==0) {r##x=GO_DOWN; tr##x=GO;} \ 231 if(tr##x==0) {r##x=GO_DOWN; tr##x=GO;} \
199 break; \ 232 break; \
200 } \ 233 } \
201 } 234 }
-   235 */
202   236  
203 void main() 237 void main()
204 { 238 {
205 char buf[10]; // Buffer pro prijem prikazu 239 char buf[10]; // Buffer pro prijem prikazu
206 unsigned int16 zakmity=0; // Osetreni zakmitu vypinacu 240 unsigned int16 zakmity=0; // Osetreni zakmitu vypinacu
207 241
208 setup_adc_ports(NO_ANALOGS|VSS_VDD); 242 setup_adc_ports(NO_ANALOGS|VSS_VDD);
209 setup_adc(ADC_CLOCK_DIV_2); 243 setup_adc(ADC_CLOCK_DIV_2);
210 setup_psp(PSP_DISABLED); 244 setup_psp(PSP_DISABLED);
211 setup_spi(SPI_SS_DISABLED); 245 setup_spi(SPI_SS_DISABLED);
212 setup_wdt(WDT_OFF); 246 setup_wdt(WDT_OFF);
213 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8); 247 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
214 setup_timer_1(T1_DISABLED); 248 setup_timer_1(T1_DISABLED);
215 setup_timer_2(T2_DISABLED,0,1); 249 setup_timer_2(T2_DISABLED,0,1);
216 setup_timer_3(T3_DISABLED|T3_DIV_BY_1); 250 setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
217 setup_ccp1(CCP_OFF); 251 setup_ccp1(CCP_OFF);
218 setup_comparator(NC_NC_NC_NC); 252 setup_comparator(NC_NC_NC_NC);
219 setup_vref(FALSE); 253 setup_vref(FALSE);
220 254
221 set_tris_a(0); // Vystupy 255 set_tris_a(0); // Vystupy
222 set_tris_b(0); 256 set_tris_b(0);
223 set_tris_e(0); 257 set_tris_e(0);
224 set_tris_f(0); 258 set_tris_f(0);
225 set_tris_d(0xFF); // Vstupy 259 set_tris_d(0xFF); // Vstupy
226 set_tris_j(0xFF); 260 set_tris_j(0xFF);
227   261  
228 output_a(0xFF); // Vsechno zhasni a zastav 262 output_a(0xFF); // Vsechno zhasni a zastav
229 output_b(0xFF); 263 output_b(0xFF);
230 output_f(0xFF); 264 output_f(0xFF);
231 output_e(0xFF); 265 output_e(0xFF);
-   266 stop_all();
-   267  
-   268 timer_run=0; // Zastav vsechny casovace
-   269 timer=0;
-   270 timer_revers=0;
-   271 timer_start=0;
-   272 timer_run_zaluzie=0;
-   273 zakmity=0;
-   274  
-   275 relay=RUN_UP; // Rele je na zacatku vypnuto
232   276  
233 r103V=STOP; // Rolety jsou zastaveny -  
234 r110N=STOP; -  
235 r104V=STOP; -  
236 r104J=STOP; -  
237 r207V=STOP; -  
238 r202J=STOP; -  
239 r204Z=STOP; -  
240 tr103V=0; -  
241 tr110N=0; -  
242 tr104V=0; -  
243 tr104J=0; -  
244 tr207V=0; -  
245 tr202J=0; -  
246 tr204Z=0; -  
247 -  
248 { 277 {
249 int n; 278 int n;
250 279
251 for(n=0;n<10;n++) 280 for(n=0;n<10;n++)
252 { 281 {
253 output_low(LED1); // Indikace restartu (pockame na nabiti kondenzatoru ve vstupnich obvodech) 282 output_low(LED1); // Indikace restartu (pockame na nabiti kondenzatoru ve vstupnich obvodech)
254 delay_ms(100); 283 delay_ms(100);
255 output_high(LED1); 284 output_high(LED1);
256 delay_ms(100); 285 delay_ms(100);
257 restart_wdt(); 286 restart_wdt();
258 } 287 }
259 } 288 }
260 289
261 s201AV=IS201AV; // Precteme vychozi stav vypinacu 290 s201AV=IS201AV; // Precteme vychozi stav vypinacu
262 s201AZ=IS201AZ; 291 s201AZ=IS201AZ;
263 s207AJ=IS207AJ; 292 s207AJ=IS207AJ;
264 s203AJ=IS203AJ; 293 s203AJ=IS203AJ;
265 s209AJ=IS209AJ; 294 s209AJ=IS209AJ;
266 r207VU=IR207VU; 295 r207VU=IR207VU;
267 r207VD=IR207VD; 296 r207VD=IR207VD;
268 s202AN=IS202AN; 297 s202AN=IS202AN;
269 r202ND=IR202ND; 298 r202ND=IR202ND;
270 r202NU=IR202NU; 299 r202NU=IR202NU;
271 s205A=IS205A; 300 s205A=IS205A;
272 s204AJ=IS204AJ; 301 s204AJ=IS204AJ;
273 r204ZD=IR204ZD; 302 r204ZD=IR204ZD;
274 r204ZU=IR204ZU; 303 r204ZU=IR204ZU;
275 304
276 CREN=0; CREN=1; // Reinitialise USART 305 CREN=0; CREN=1; // Reinitialise USART
277 306
278 enable_interrupts(INT_TIMER0); 307 enable_interrupts(INT_TIMER0);
279 enable_interrupts(GLOBAL); 308 enable_interrupts(GLOBAL);
280   309  
281 while(TRUE) 310 while(TRUE)
282 { 311 {
283 restart_wdt(); 312 restart_wdt();
284   313  
285 if(kbhit()) // Chce po nas nekdo neco? 314 if(kbhit()) // Chce po nas nekdo neco?
286 { 315 {
287 buf[0]=getc(); 316 buf[0]=getc();
288 if((buf[0]=='S')||(buf[0]=='R')) // Jinym znakem nesmi zacinat prikaz 317 if((buf[0]=='S')||(buf[0]=='R')) // Jinym znakem nesmi zacinat prikaz
289 { 318 {
290 int8 n=0; // Ukazatel do prijimaciho bufferu 319 int8 n=0; // Ukazatel do prijimaciho bufferu
291 timer=RECEIVE; // Timeout pro prijem znaku 320 timer=T_RECEIVE; // Timeout pro prijem znaku
292 321
293 do 322 do
294 { 323 {
295 if(kbhit()) // Je dalsi znak? 324 if(kbhit()) // Je dalsi znak?
296 { 325 {
297 n++; 326 n++;
298 buf[n]=getc(); 327 buf[n]=getc();
299 } 328 }
300 } while ((buf[n]!='\r')&&(timer>0)&&(n<7)); 329 } while ((buf[n]!='\r')&&(timer>0)&&(n<7));
301 330
302 if (timer==0) { CREN=0; CREN=1; } // Reinitialise USART 331 if (timer==0) { CREN=0; CREN=1; } // Reinitialise USART
303   332  
304 output_toggle(LED1); // Ukonceni prijimani prikazu 333 output_toggle(LED1); // Ukonceni prijimani prikazu
305 334
306 if((timer>0)) 335 if((timer>0))
307 { 336 {
308   337  
309 if((buf[0]=='S')&&(n>=4)) // Zmena stavu svetla 338 if((buf[0]=='S')&&(n>=4)) // Zmena stavu svetla
310 { 339 {
311 if(buf[1]=='1') 340 if(buf[1]=='1')
312 { 341 {
313 switch(buf[2]) 342 switch(buf[2])
314 { 343 {
315 case '2': 344 case '2':
316 output_toggle(OS102A); 345 output_toggle(OS102A);
317 break; 346 break;
318 case '3': 347 case '3':
319 output_toggle(OS103J); 348 output_toggle(OS103J);
320 break; 349 break;
321 case '4': 350 case '4':
322 output_toggle(OS104A); 351 output_toggle(OS104A);
323 break; 352 break;
324 case '5': 353 case '5':
325 if(buf[3]=='A') {output_toggle(OS105A);} 354 if(buf[3]=='A') {output_toggle(OS105A);}
326 if(buf[3]=='Z') {output_toggle(OS105Z);} 355 if(buf[3]=='Z') {output_toggle(OS105Z);}
327 break; 356 break;
328 case '6': 357 case '6':
329 output_toggle(OS106A); 358 output_toggle(OS106A);
330 break; 359 break;
331 case '7': 360 case '7':
332 output_toggle(OS107A); 361 output_toggle(OS107A);
333 break; 362 break;
334 case '8': 363 case '8':
335 // output_toggle(OS108A); 364 // output_toggle(OS108A);
336 break; 365 break;
337 case '9': 366 case '9':
338 output_toggle(OS109A); 367 output_toggle(OS109A);
339 break; 368 break;
340 case 'a': 369 case 'a':
341 // output_toggle(OS110J); 370 // output_toggle(OS110J);
342 output_toggle(OS110N); 371 output_toggle(OS110N);
343 break; 372 break;
344 } 373 }
345 } 374 }
346 } 375 }
347 376
348 if((buf[0]=='R')&&(n>=5)) // Zmena stavu rolety 377 if((buf[0]=='R')&&(n>=5)) // Zmena stavu rolety
349 { 378 {
350 if(buf[1]=='1') 379 if(buf[1]=='1')
351 { 380 {
352 switch(buf[2]) 381 switch(buf[2])
353 { 382 {
354 case '3': 383 case '3':
355 if(buf[4]=='U') {up(&r103V,&tr103V);} else {down(&r103V,&tr103V);} 384 //!!! if(buf[4]=='U') {up(&r103V,&tr103V);} else {down(&r103V,&tr103V);}
356 break; 385 break;
357 case '4': 386 case '4':
358 if(buf[3]=='V') if((buf[4]=='U')) {up(&r104V,&tr104V);} else {down(&r104V,&tr104V);} 387 //!!! if(buf[3]=='V') if((buf[4]=='U'))
359 if(buf[3]=='J') if((buf[4]=='U')) {up(&r104J,&tr104J);} else {down(&r104J,&tr104J);} 388 //!!! if(buf[3]=='J') if((buf[4]=='U')) {up(&r104J,&tr104J);} else {down(&r104J,&tr104J);}
360 break; 389 break;
361 case 'a': 390 case 'a':
362 if((buf[4]=='U')) {up(&r110N,&tr110N);} else {down(&r110N,&tr110N);} 391 //!!! if((buf[4]=='U')) {up(&r110N,&tr110N);} else {down(&r110N,&tr110N);}
363 break; 392 break;
364 } 393 }
365 } 394 }
366 } 395 }
367 396
368 } 397 }
369 } 398 }
370 } 399 }
371 400
372 run(103V); // Rizeni rolet za behu -  
373 // run(104V); -  
374 run(104J); -  
375 run(207V); -  
376 run(202J); -  
377 run(204Z); -  
378   -  
379 switch(r110N) // Zaluzie ma specielni rizeni 401 //!!! switch(r110N) // Zaluzie ma specielni rizeni
380 { -  
381 case STOP: -  
382 OFF(OR110NU); -  
383 OFF(OR110ND); -  
384 break; -  
385 case GO_UP: -  
386 OFF(OR110ND); -  
387 ON(OR110NU); -  
388 if(tr110N==0) {r110N=STOP;} -  
389 break; -  
390 case GO_DOWN: -  
391 OFF(OR110NU); -  
392 ON(OR110ND); -  
393 if(tr110N==0) {r110N=STOP;} -  
394 break; -  
395 case REVERS_UP: -  
396 OFF(OR110NU); -  
397 OFF(OR110ND); -  
398 if(tr110N==0) {r110N=GO_UP; tr110N=GO_ZALUZIE;} // Nahoru pouze kratce na otevreni zaluzie -  
399 break; -  
400 case REVERS_DOWN: -  
401 OFF(OR110NU); -  
402 OFF(OR110ND); -  
403 if(tr110N==0) {r110N=GO_DOWN; tr110N=GO_ZALUZIE;} // Dolu take kratce pouze na zaklopeni zaluzie -  
404 break; -  
405 } -  
406   402  
407 // mistni vypinace z 2. n.p. 403 // mistni vypinace z 2. n.p.
408 if (0==zakmity) 404 if (0==zakmity)
409 { 405 {
410 if(s201AV!=IS201AV) {s201AV=IS201AV; output_toggle(OS102A); zakmity=ZAKMIT;} 406 if(s201AV!=IS201AV) {s201AV=IS201AV; output_toggle(OS102A); zakmity=ZAKMIT;}
411 if(s201AZ!=IS201AZ) {s201AZ=IS201AZ; output_toggle(OS102A); zakmity=ZAKMIT;} 407 if(s201AZ!=IS201AZ) {s201AZ=IS201AZ; output_toggle(OS102A); zakmity=ZAKMIT;}
412 if(s207AJ!=IS207AJ) {s207AJ=IS207AJ; output_toggle(OS207A); zakmity=ZAKMIT;} 408 if(s207AJ!=IS207AJ) {s207AJ=IS207AJ; output_toggle(OS207A); zakmity=ZAKMIT;}
413 if(s203AJ!=IS203AJ) {s203AJ=IS203AJ; output_toggle(OS203A); zakmity=ZAKMIT;} 409 if(s203AJ!=IS203AJ) {s203AJ=IS203AJ; output_toggle(OS203A); zakmity=ZAKMIT;}
414 if(s209AJ!=IS209AJ) {s209AJ=IS209AJ; output_toggle(OS209A); zakmity=ZAKMIT;} 410 if(s209AJ!=IS209AJ) {s209AJ=IS209AJ; output_toggle(OS209A); zakmity=ZAKMIT;}
415 if(s205A!=IS205A) {s205A=IS205A; output_toggle(OS205A); zakmity=ZAKMIT;} 411 if(s205A!=IS205A) {s205A=IS205A; output_toggle(OS205A); zakmity=ZAKMIT;}
416 if(s204AJ!=IS204AJ) {s204AJ=IS204AJ; output_toggle(OS204A); zakmity=ZAKMIT;} 412 if(s204AJ!=IS204AJ) {s204AJ=IS204AJ; output_toggle(OS204A); zakmity=ZAKMIT;}
417 if(s202AN!=IS202AN) {s202AN=IS202AN; output_toggle(OS202A); zakmity=ZAKMIT;} 413 if(s202AN!=IS202AN) {s202AN=IS202AN; output_toggle(OS202A); zakmity=ZAKMIT;}
418 414
419 if(r207VU!=IR207VU) {r207VU=IR207VU; up(&r207V,&tr207V); zakmity=ZAKMIT;} 415 if(r207VU!=IR207VU) // Zmenil se stav vypinace
-   416 {
420 if(r207VD!=IR207VD) {r207VD=IR207VD; down(&r207V,&tr207V); zakmity=ZAKMIT;} 417 r207VU=IR207VU; // Poznamenej soucasny stav vypinace
-   418  
-   419 if (rol[R207V]==RUN)
-   420 {
-   421 rol[R207V]=STOP; // Roleta jela, tak zastav
-   422 OFF(OR207V);
-   423 }
-   424 else
-   425 {
-   426 if ((relay==DOWN)||(relay==RUN_DOWN)) // Rele je prepnuto na druhou stranu!
-   427 {
-   428 relay=REVERS_UP; // Reverzuj
-   429 timer_revers=T_REVERS;
-   430 stop_all(); // Vsechno zastav
-   431 }
-   432 if (relay==RUN_UP)
-   433 {
-   434 ON(OR207V); // Jede se spravnym smerem, tak jenom pust roletu
-   435 }
-   436 rol[R104V]=RUN; // Poznamenej, ze se jede, a natahni bezpecnostni casovac
-   437 timer_run=T_GO;
-   438 }
-   439 zakmity=ZAKMIT;
-   440 }
-   441 if(r207VD!=IR207VD)
-   442 {
-   443 r207VD=IR207VD;
-   444  
-   445 if (rol[R207V]==RUN)
-   446 {
-   447 rol[R207V]=STOP;
-   448 OFF(OR207V);
-   449 }
-   450 else
-   451 {
-   452 if ((relay==UP)||(relay==RUN_UP))
-   453 {
-   454 relay=REVERS_DOWN;
-   455 timer_revers=T_REVERS;
-   456 stop_all();
-   457 }
-   458 if (relay==RUN_DOWN)
-   459 {
-   460 ON(OR207V);
-   461 }
-   462 rol[R104V]=RUN;
-   463 timer_run=T_GO;
-   464 }
-   465 zakmity=ZAKMIT;
-   466 }
-   467  
421 if(r202NU!=IR202NU) {r202NU=IR202NU; up(&r202J,&tr202J); zakmity=ZAKMIT;} 468 //!!! if(r202NU!=IR202NU) {r202NU=IR202NU; up(&r202J,&tr202J); zakmity=ZAKMIT;}
422 if(r202ND!=IR202ND) {r202ND=IR202ND; down(&r202J,&tr202J); zakmity=ZAKMIT;} 469 //!!! if(r202ND!=IR202ND) {r202ND=IR202ND; down(&r202J,&tr202J); zakmity=ZAKMIT;}
423 if(r204ZU!=IR204ZU) {r204ZU=IR204ZU; up(&r204Z,&tr204Z); zakmity=ZAKMIT;} 470 //!!! if(r204ZU!=IR204ZU) {r204ZU=IR204ZU; up(&r204Z,&tr204Z); zakmity=ZAKMIT;}
424 if(r204ZD!=IR204ZD) {r204ZD=IR204ZD; down(&r204Z,&tr204Z); zakmity=ZAKMIT;} 471 //!!! if(r204ZD!=IR204ZD) {r204ZD=IR204ZD; down(&r204Z,&tr204Z); zakmity=ZAKMIT;}
425 } 472 }
426 else zakmity--; 473 else zakmity--;
427 } 474 }
-   475
-   476 switch (relay)
-   477 {
-   478 case UP:
-   479 if (timer_start==0) // Rele prepnuto, muzeme sepnout triaky
-   480 {
-   481 relay=RUN_UP; // Zmen stav na "jede se"
-   482 run_all(); // Sepni triaky u rolet, ktere maji jet
-   483 timer_run=T_GO; // Natahni bezpecnostni casovac
-   484 }
-   485 break;
-   486  
-   487 case DOWN:
-   488 if (timer_start==0) // Rele prepnuto, muzeme sepnout triaky
-   489 {
-   490 relay=RUN_DOWN; // Zmen stav na "jede se"
-   491 run_all(); // Sepni triaky u rolet, ktere maji jet
-   492 timer_run=T_GO; // Natahni bezpecnostni casovac
-   493 }
-   494 break;
-   495
-   496 case RUN_UP:
-   497 if (timer_run==0) // Vyprsel bezpecnostni casovac
-   498 {
-   499 stop_all(); // Vsechno zastav
-   500 }
-   501 break;
-   502  
-   503 case RUN_DOWN:
-   504 if (timer_run==0) // Vyprsel bezpecnostni casovac
-   505 {
-   506 relay=REVERS_UP; // Vsechno zastav a reverzuj pro prepnuti rele do klidove polohy bez energizace civky
-   507 stop_all();
-   508 timer_revers=T_REVERS;
-   509 }
-   510 break;
-   511
-   512 case REVERS_UP:
-   513 if (timer_revers==0) // Uz se snad vybil kondenzator, muzeme reverzovat
-   514 {
-   515 relay=UP; // Prepni rele
-   516 OFF(RE);
-   517 timer_start=T_START; // Pockej na prepnuti rele
-   518 }
-   519 break;
-   520  
-   521 case REVERS_DOWN:
-   522 if (timer_revers==0) // Uz se snad vybil kondenzator, muzeme reverzovat
-   523 {
-   524 relay=DOWN; // Prepni rele
-   525 ON(RE);
-   526 timer_start=T_START; // Pockej na prepnuti rele
-   527 }
-   528 break;
-   529 }
428 } 530 }