/* 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; // Casovace
int16 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.2
int 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.1
request 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 zhasnout
vs1_5 = V1_2; // Inicializace schodistaku
vs1_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 rolety
v2_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 rolet
vs1_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)
} else
if (input_state(S1_5) && input_state(S1_2))
{
ON(S1_5)
ON(S1_2)
ON(S2_1)
} else
if (!input_state(S1_5) && !input_state(S1_2))
{
OFF(S1_5)
} else
if (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 pozadavek
printf("pozadavek NOTHING\r\n");
}
else
{
pozadavek2_7 = UP; // Poznamenej pozadavek
printf("pozadavek UP\r\n");
}
OFF(R2_7D) // Zastav
OFF(R2_7U) // Zastav
t2_7r = REVERZ; // Cas pro zmenu pohybu
v2_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 pozadavek
printf("pozadavek NOTHING\r\n");
}
else
{
pozadavek2_7 = DOWN; // Poznamenej pozadavek
printf("pozadavek DOWN\r\n");
}
OFF(R2_7D) // Zastav
OFF(R2_7U) // Zastav
t2_7r = REVERZ; // Cas pro zmenu pohybu
v2_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++;
}
}