/* DUM - provizorni ovladani svetel a rolet na hvezdarne */#include "main.h"#CASE // Case sensitive compiler#define ZAKMIT 100 // Cas pro osetreni zakmitu v ms#define ZATAHNUTI 30000 // Cas potrebny na vysunuti rolety v ms#define REVERZ 300 // Cas pro reverzaci v ms#define S1_2 PIN_D0 // T1 Svetlo#define S1_5 PIN_D1 // T2#define S2_7 PIN_D2 // T3#define R2_7U PIN_D3 // T4 Roleta#define R2_7D PIN_D4 // T5#define S2_9 PIN_D5 // T6#define S2_3 PIN_D6 // T7#define S2_1 PIN_D7 // T8#define V1_2 !input(PIN_A0) // A Vypinac#define V2_1 !input(PIN_A1) // B#define V2_7 !input(PIN_A2) // C#define V2_7U !input(PIN_A3) // D Vypinac puleny#define V2_7D !input(PIN_A4) // E#define V2_6 !input(PIN_A5) // F#define V2_9 !input(PIN_E0) // G#define V2_3 !input(PIN_E1) // H#define ON(port) output_low(port);#define OFF(port) output_high(port);typedef enum {UP, DOWN, NOTHING} request;void main(){int t1_2, t1_5; // Casovaceint16 t2_7r;int16 t2_7;int vs1_2, vs1_2_old, vs1_5, vs1_5_old; // Vypinac schodistovy#bit vs1_2_0 = vs1_2.0#bit vs1_2_1 = vs1_2.1#bit vs1_2_2 = vs1_2.2int v2_7, v2_7_old;#bit v2_7d = v2_7.0#bit v2_7u = v2_7.1#bit v2_7d_old = v2_7_old.0#bit v2_7u_old = v2_7_old.1request pozadavek2_7;setup_adc_ports(NO_ANALOGS);setup_adc(ADC_OFF);setup_psp(PSP_DISABLED);setup_spi(SPI_SS_DISABLED);setup_wdt(WDT_OFF);setup_timer_0(RTCC_INTERNAL);setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);setup_timer_3(T3_DISABLED|T3_DIV_BY_1);setup_ccp1(CCP_OFF);setup_comparator(NC_NC_NC_NC);setup_vref(FALSE);printf("ahoj\r\n");output_d(0xFF); // Vsechno zhasnoutvs1_5 = V1_2; // Inicializace schodistakuvs1_5_old = vs1_5;vs1_2 = 0;vs1_2_1 = V2_1;vs1_2_2 = V2_6;vs1_2_old = vs1_2;v2_7 = 0; // Inicializace roletyv2_7d = V2_7D;v2_7u = V2_7U;v2_7_old = v2_7;t2_7 = ZATAHNUTI / 2;while(TRUE){vs1_2_1 = V2_1; // Precti stavy schodistaku a vypinacu roletvs1_2_2 = V2_6;vs1_5 = V1_2;v2_7d = V2_7D;v2_7u = V2_7U;// Schodiste a kuchyn ----------------------------------------------------------if ((vs1_5 != vs1_5_old) && (0 == t1_5)){vs1_5_old = vs1_5;t1_5 = ZAKMIT;if (!input_state(S1_5) && input_state(S1_2)){OFF(S1_5)} elseif (input_state(S1_5) && input_state(S1_2)){ON(S1_5)ON(S1_2)ON(S2_1)} elseif (!input_state(S1_5) && !input_state(S1_2)){OFF(S1_5)} elseif (input_state(S1_5) && !input_state(S1_2)){OFF(S1_2)OFF(S2_1)}}if ((vs1_2_old != vs1_2) && (0 == t1_2)) // Schodiste{vs1_2_old = vs1_2;t1_2 = ZAKMIT;output_toggle(S1_2);output_toggle(S2_1);}// Roleta klubovna -------------------------------------------------------------if ((v2_7u_old != v2_7u) && (t2_7 > 0) && (0 == t2_7r)) // Pokud je pozadavek nahoru a nejsme nahore{if (!input_state(R2_7U)) // Nejedeme zrovna nahoru?{pozadavek2_7 = NOTHING; // Poznamenej pozadavekprintf("pozadavek NOTHING\r\n");}else{pozadavek2_7 = UP; // Poznamenej pozadavekprintf("pozadavek UP\r\n");}OFF(R2_7D) // ZastavOFF(R2_7U) // Zastavt2_7r = REVERZ; // Cas pro zmenu pohybuv2_7_old = v2_7; // Poznamenej zmenu vypinace}if ((v2_7d_old != v2_7d) && (t2_7 < ZATAHNUTI) && (0 == t2_7r)) // Pokud je pozadavek dolu a nejsme dole{if (!input_state(R2_7D)) // Nejedeme zrovna dolu?{pozadavek2_7 = NOTHING; // Poznamenej pozadavekprintf("pozadavek NOTHING\r\n");}else{pozadavek2_7 = DOWN; // Poznamenej pozadavekprintf("pozadavek DOWN\r\n");}OFF(R2_7D) // ZastavOFF(R2_7U) // Zastavt2_7r = REVERZ; // Cas pro zmenu pohybuv2_7_old = v2_7; // Poznamenej zmenu vypinace}if ((UP == pozadavek2_7) && (0 == t2_7r)){printf("UP\r\n");ON(R2_7U)pozadavek2_7 = NOTHING;}if ((DOWN == pozadavek2_7) && (0 == t2_7r)){printf("DOWN\r\n");ON(R2_7D)pozadavek2_7 = NOTHING;}if (t2_7 == 0) OFF(R2_7U);if (t2_7 == ZATAHNUTI) OFF(R2_7D);// Obycejna svetla ------------------------------------------------------------if (V2_7) ON(S2_7) else OFF(S2_7)if (V2_3) ON(S2_3) else OFF(S2_3)if (V2_9) ON(S2_9) else OFF(S2_9)delay_ms(1);if (t1_2>0) t1_2--;if (t1_5>0) t1_5--;if (t2_7r>0) t2_7r--;if ((t2_7>0) && (!input_state(R2_7U))) t2_7--;if ((t2_7<ZATAHNUTI) && (!input_state(R2_7D))) t2_7++;}}