( ПЕРЕМЕННЫЕ )
( 1 - флаг разрешения воспроизведения меню )
( 2 - параметр состояния оборудования вкл/выкл )
( 3 - флаг старта дозвона )
( 4 - флаг успешного дозвона )
( 5 - флаг запрета исходящих уведомлений )
( 6 - число попыток дозвона )
( 7 - флаг однократого уведомления в меню )
( 8 - предыдущее состояние питания от сети )
( 9 - статус отправки сообщения )
( 11 - состояние сигнализации 1 )
( 12 - состояние сигнализации 2 )
( 13 - состояние сигнализации 3 )
( 20 - звонок сигнализации начался)
( 21 - счетчик попыток дозвона сигнализации )
( 30 - флаг успешного оповещения )
( 31 - предварительный флаг сигнализации 1 )
( 32 - предварительный флаг сигнализации 2 )
( 33 - предварительный флаг сигнализации 3 )
( 41 - флаг сработавшей сигнализации 1 )
( 42 - флаг сработавшей сигнализации 2 )
( 43 - флаг сработавшей сигнализации 3 )
( ТАЙМЕРЫ )
( 1 - основной цикл ожидания звонка и проверки входа )
( 3 - обновление экрана и меню )
( 4 - повтор дозвона )
( 5 - повторный дозвон если температура не повысилась )
( 6 - повтор меню )
( 7 - отправка сообщения )
( 11 - дозвон о срабатывании сигнализации )
( 21 - отправка SMS о срабатывании сигнализации )
: false 0 ;
: true -1 ;
: initm true 1 VAR! ;
( кладем на стек статус питания )
: mPOW
POW? 11.0 F>
;
( Слово для красивого завершення меню )
: by-by
." byby.wav " PLAY HOLD DROP ;
: b2state
3 RO?
IF
." on.wav " PLAY initm DROP
ELSE
." off.wav " PLAY initm DROP
THEN ;
: allstate2
." boyler2.wav " PLAY b2state DROP ;
: b1state
2 RO?
IF
." on.wav " PLAY allstate2 DROP
ELSE
." off.wav " PLAY allstate2 DROP
THEN ;
: allstate1
." boyler1.wav " PLAY b1state DROP ;
: kstate
1 RO?
IF
." on.wav " PLAY allstate1 DROP
ELSE
." off.wav " PLAY allstate1 DROP
THEN ;
: allstate
." kotel.wav " PLAY kstate DROP ;
: saystate
2 VAR? RO?
IF
." on.wav " PLAY initm DROP
ELSE
." off.wav " PLAY initm DROP
THEN ;
: allstart true 1 RO! true 2 RO! true 3 RO! ;
: allstop false 1 RO! false 2 RO! false 3 RO! ;
: setalert
5 VAR? NOT
DUP 5 VAR!
IF
." noalert.wav " PLAY initm DROP
ELSE
." alalert.wav " PLAY initm DROP
THEN ;
: setsign
1 DO? NOT 6 DI? NOT 7 DI? NOT 8 DI? NOT OR OR AND
IF
." signfail.wav " PLAY initm DROP
ELSE
1 DO? NOT
DUP 1 DO!
IF
." signon.wav " PLAY initm DROP
ELSE
." signof.wav " PLAY initm DROP
THEN
THEN
;
: check
DUP
1 =
IF
1 RO? NOT 1 RO! 1 2 VAR! ." kotel.wav " PLAY saystate DROP DROP
ELSE
DUP
2 =
IF
2 RO? NOT 2 RO! 2 2 VAR! ." boyler1.wav " PLAY saystate DROP DROP
ELSE
DUP
3 =
IF
3 RO? NOT 3 RO! 3 2 VAR! ." boyler2.wav " PLAY saystate DROP DROP
ELSE
DUP
4 =
IF
allstart ." allstart.wav " PLAY initm DROP DROP
ELSE
DUP
5 =
IF
allstop ." allstop.wav " PLAY initm DROP DROP
ELSE
DUP
6 =
IF
allstate DROP
ELSE
DUP
7 =
IF
setalert DROP
ELSE
8 =
IF
setsign
ELSE
by-by
THEN
THEN
THEN
THEN
THEN
THEN
THEN
THEN
;
: wait WAITKEY check by-by STOP DROP ;
: ssign
1 DO?
IF
." 8_.wav " PLAY wait DROP
ELSE
." 8.wav " PLAY wait DROP
THEN
;
: alrttate
5 DI?
IF
5 VAR?
IF
." 7.wav " PLAY ssign DROP
ELSE
." 7_.wav " PLAY ssign DROP
THEN
ELSE
ssign
THEN
;
: mstate
." 6.wav " PLAY alrttate DROP ;
: moff
." 5.wav " PLAY mstate DROP ;
: mon
." 4.wav " PLAY moff DROP ;
: mb2 3 RO?
IF ." 3_.wav " PLAY mon DROP ELSE ." 3.wav " PLAY mon DROP THEN ;
: mb1 2 RO?
IF ." 2_.wav " PLAY mb2 DROP ELSE ." 2.wav " PLAY mb2 DROP THEN ;
: mk 1 RO?
IF ." 1_.wav " PLAY mb1 DROP ELSE ." 1.wav " PLAY mb1 DROP THEN ;
: salert
1 RO?
IF
." damage.wav " PLAY mk DROP
ELSE
." temp.wav " PLAY mk DROP
THEN
false 7 VAR!
;
: kon true 1 RO! ;
: koff false 1 RO! ;
: b1on true 2 RO! ;
: b1off false 2 RO! ;
: b2on true 3 RO! ;
: b2off false 3 RO! ;
: son
6 DI? 7 DI? 8 DI? AND AND
IF
true 1 DO!
ELSE
3.0 40 TIMER! son
THEN
;
: soff false 1 DO! ;
: m1
1 RO? 51 VAR? <>
IF
1 RO? DUP 51 VAR!
IF
." Выкл_котел " 1 MENU koff
ELSE
." Вкл_котел " 1 MENU kon
THEN
THEN
." котел: " BLACK 0 0 PRINT
1 RO?
IF
." ВКЛ " ORANGE 9 0 PRINT
ELSE
." ВЫКЛ " GREEN 9 0 PRINT
THEN
;
: m2
2 RO? 52 VAR? <>
IF
." бойлер1: " BLACK 0 1 PRINT
2 RO? DUP 52 VAR!
IF
." Выкл_бойлер1 " 2 MENU b1off
ELSE
." Вкл_бойлер1 " 2 MENU b1on
THEN
THEN
." бойлер1: " BLACK 0 1 PRINT
2 RO?
IF
." ВКЛ " ORANGE 9 1 PRINT
ELSE
." ВЫКЛ " GREEN 9 1 PRINT
THEN
;
: m3
3 RO? 53 VAR? <>
IF
3 RO? DUP 53 VAR!
IF
." Выкл_бойлер2 " 3 MENU b2off
ELSE
." Вкл_бойлер2 " 3 MENU b2on
THEN
THEN
." бойлер2: " BLACK 0 2 PRINT
3 RO?
IF
." ВКЛ " ORANGE 9 2 PRINT
ELSE
." ВЫКЛ " GREEN 9 2 PRINT
THEN
;
: psignal
1 DO? 54 VAR? <> 40 TIMER? 0 > OR
IF
1 DO? DUP 54 VAR!
IF
." Выкл_сигнал " 4 MENU soff
ELSE
40 TIMER? 0 >
IF
." Выкл_сигнал " 4 MENU soff
ELSE
." Вкл_сигнализ " 4 MENU son
THEN
THEN
THEN
." Сигнализ: " BLACK 0 3 PRINT
1 DO?
IF
." ВКЛ " ORANGE 9 3 PRINT
ELSE
40 TIMER? 0 >
IF
." ОЖИД " BLUE 9 3 PRINT
ELSE
." ВЫКЛ " GREEN 9 3 PRINT
THEN
THEN
;
|