● 사용부품
PB-2S
PIC Basic 보드
LCD
4X4 키패드
STEP 모터
IR 리모콘
● 사용포트(0~26)
0 ~ 7번포트(0블럭) : IR 리모콘
8 ~ 15번포트(1블럭) : 키패드
16 ~ 19번 포트 : STEP 모터
20번 포트 : 스피커
21 ~ 22번 포트 : LED
- 총 23개 포트 사용
● 기능 설명
⋅ 자 동 문 잠 김
- 문이 닫히면 센서에 의해 확인
- 잠금장치 해제 후에도 30초가 지날때까지 문을 열지 않으면 자동으로 잠김
- 문을 닫은 후 바로 열 상황에 대비하여 5초 정도 후에 잠김
⟹ 잠금 장치에 센서 사용으로 인한 신뢰도 향상
- 잠겨있는 상태에서 외부 무단침입 방지를 기능
⟹ 비밀번호 입력 외 비정상적인 방법으로 문이 열렸을 경우 경보음
⋅ 비 밀 번 호
- 비밀번호 수정
◦ 문바깥쪽 키패드를 사용하여 변경
◦ 비밀번호 수정 버튼을 누르면 현재 비밀번호 확인절차 이후 변경가능하며 실수 같은 예외사항을 줄이기 위해 바뀐 비밀번호를 한번 더 확인
- 비밀번호 확인
◦ 문 바깥쪽 키패드를 이용하여 비밀번호 입력
◦ 숫자 키패드를 누르면 자동으로 비밀번호 입력모드로 변경
◦ 정확한 비밀번호가 입력되면 문 잠김이 해제
◦ 3회 이상 비밀번호 오류시 경보음
⋅ 음 성 녹 음(자동 응답기능, 미구현)
- 부재중 이거나 개인적인 사정으로 손님 방문이 불가능 할 때를 위한 기능
- ‘메뉴버튼 -> 음성녹음 버튼’으로 부재중 멘트 녹음
- 부재중 모드 활성화시 초인종을 누르면 입력된 멘트 출력
⋅ 초 인 종
- 초인종이 눌리면 집안에서 인식할 수 있는 소리가 울림
- 자동응답 기능 활성화 시 집안에 소리가 울림기능이 작동하지 않고 스피커를 통해 녹음되어진 메시지를 전달
◦ 한번더 초인종을 누르면 매세지 녹음 가능
● 프로그램 소스
DIM I AS BYTE '입력 변수 DIM E AS BYTE '키패트 메뉴 관련 DIM OPW(4) AS BYTE ' 저장된 비밀번호 DIM TPW(4) AS BYTE ' 입력받은 비밀번호 DIM TTPW(4) AS BYTE ' 입력받은 비밀번호 DIM K AS BYTE '임의변수(비밀번호 관련) DIM M AS BYTE '비밀번호 틀린 횟수 DIM N AS BYTE '확인버튼 관련 DIM L AS BYTE '비밀번호 관련 DIM Q AS BYTE '비밀번호 변경 관련 DIM MT AS BYTE '스텝모터 관련 변수 DIM R AS BYTE '리모콘 입력 관련 변수 DIM P AS BYTE '센서 관련 변수 DIM PT AS BYTE '리모콘 관련 변수(센서 1 잠금장치) DIM PO AS BYTE '리모콘 관련 변수(센서 2 문) DIM LM AS BYTE '잠금장치 관련 변수(LM=0 열림, LM=1 잠김) DIM CNT AS BYTE '카운트 DIM CNTT AS BYTE '카운트
SET PICBUS HIGH LCDINIT
K = 0 M = 1 P = 1 LM = 1 CNT = 0 CNTT = 0
PO = 0 OUT 21,1 PT = 0 OUT 22,1
'0으로 비밀번호 초기화 OPW(0) = 15 OPW(1) = 15 OPW(2) = 15 OPW(3) = 15
10R = BYTEIN(0) '리모콘
IF R = 17 THEN PO = 0 OUT 21,1 ELSEIF R = 18 THEN PO = 1 OUT 21,0 ELSEIF R = 20 THEN PT = 0 OUT 22,1 ELSEIF R = 21 THEN PT = 1 OUT 22,0 END IF
IF K = 0 THEN CLS LOCATE 2,1 PRINT "DIGITAL" LOCATE 2,2 PRINT "DOOR LOCK"
END IF
IF P = 1 AND PT = 1 THEN CLS LOCATE 1, 1 PRINT "ARLET!!!" BEEP 20 BEEP 20 BEEP 20 BEEP 20 BEEP 20
GOTO 100 ELSEIF P = 1 AND PO = 1 THEN CLS LOCATE 1, 1 PRINT "ARLET!!!" 100BEEP 20 BEEP 20 BEEP 20 BEEP 20 BEEP 20
GOTO 100 END IF
I = KEYDELAY(PADIN(1), 1, 30, 30) IF I = 0 THEN GOTO 10
'메뉴버튼(E = 1) IF I = 5 THEN IF E = 0 THEN 40K = 1 CLS LOCATE 0,0 PRINT "<*MENU*>" LOCATE 0,1 PRINT "1.CHANGE THE P/W" LOCATE 0,2 PRINT "2.RECORDING" LOCATE 0,3 PRINT "3.Listen" E = 1 ELSEIF E =1 THEN E = 0 K = 0 GOTO 10 END IF
'열기버튼 ELSEIF I = 1 OR E = 5 THEN
OUT 17, 1 OUT 16, 0 OUT 18, 1
CLS LOCATE 6,1 PRINT "OPEN" PLAY 20, "C7D7E7"
FOR I = 0 TO 47 OUT 19, 1 DELAY 2 OUT 19, 0 DELAY 2 NEXT I
CLS P = 0 K = 0 LM = 0 PO = 1 OUT 21,0 GOTO 70
'잠금버튼(센서 사용시 필히 수정!!) ELSEIF I = 9 THEN 60IF LM = 0 THEN P = 1 PO = 0 PT = 0
OUT 17, 1 OUT 16, 1 OUT 18, 1
CLS LOCATE 6,1 PRINT "CLOSE" PLAY 20, "E7D7C7"
FOR I = 0 TO 47 OUT 19, 1 DELAY 2 OUT 19, 0 DELAY 2 NEXT I
CLS PT = 0 OUT 21,1 OUT 22,1 K = 0 LM = 1
ELSEIF LM = 1 THEN P = 1 PO = 0 PT = 0
OUT 17, 1 OUT 16, 1 OUT 18, 1
CLS LOCATE 6,1 PRINT "CLOSE" PLAY 20, "E7D7C7" CLS PT = 0 OUT 21,1 OUT 22,1 K = 0 LM = 1 END IF
'자동응답 버튼(E = 2)(보이스 레코더 사용시 필히 수정) ELSEIF I = 13 THEN CLS LOCATE 2,1 PRINT "Be away" PLAY 20, "G7E7" IF E = 0 THEN DELAY 1000 PRINT " ON" PLAY 20, "C7D7E7" E = 2 ELSE DELAY 1000 PRINT " OFF" PLAY 20, "E7D7C7" E = 0 END IF CLS K = 0
'확인 버튼(비밀번호 확인) ELSEIF I = 14 THEN CLS IF K = 4 THEN FOR N = 0 TO 3 IF OPW(N) = TPW(N) THEN IF N =3 THEN LOCATE 6,1 PRINT "OPEN" PLAY 20, "C7D7E7" CLS
OUT 17, 1 OUT 16, 0 OUT 18, 1
FOR I = 0 TO 47 OUT 19, 1 DELAY 2 OUT 19, 0 DELAY 2 NEXT I LM = 0 PO = 1 OUT 21,0 GOTO 70 END IF ELSE IF M = 3 THEN CLS LOCATE 2,1 PRINT "INPUT ERROR" LOCATE 2,2 PRINT "Num." PRINT DEC(M) PLAY 20, "G4G4G4G4G4G4G4" DELAY 2000 CLS K = 0 M = 1 GOTO 10 ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" LOCATE 2,2 PRINT "Num." PRINT DEC(M) PLAY 20, "G4" CLS K = 0 M = M + 1 GOTO 10 END IF END IF NEXT N END IF K = 0
'CALL 버튼 ELSEIF I = 16 THEN IF E = 2 THEN CLS LOCATE 2, 1 PRINT "Be away" LOCATE 2, 2 PRINT "Message..." DELAY 4000 ELSEIF E = 0 THEN CLS LOCATE 2, 1 PRINT "CALLING..." PLAY 20, "G2E2" END IF CLS K = 0
'숫자패드 옵션 ELSE CLS '메뉴 버튼 활성화 시 IF E = 1 THEN IF I = 12 THEN CLS LOCATE 0,0 PRINT "CHANGE P/W" L = 0 K = 0 N = 0 M = 1 Q = 1 GOTO 20 ELSEIF I = 11 THEN CLS LOCATE 0,0 PRINT "RECORDING..." DELAY 2000 CLS L = 0 E = 0 K = 0 GOTO 40 ELSEIF I = 10 THEN CLS LOCATE 0,0 PRINT "LISTENING..." DELAY 2000 CLS L = 0 E = 0 K = 0 GOTO 40 END IF ELSEIF E = 0 OR E = 2 THEN IF K <= 3 THEN L = 0 LOCATE 1,1 PRINT "Enter the p/w"
TPW(K) = I LOCATE 6,2 FOR L = 0 TO K PRINT "*" NEXT L
K = K + 1
ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" PLAY 20, "G4" CLS K = 0 GOTO 10 END IF END IF END IF
GOTO 10
'비밀번호 변경부분 20IF K <= 5 THEN L = 0 LOCATE 1,1 PRINT "Enter the p/w"
I = KEYDELAY(PADIN(1), 1, 30, 30) IF I = 0 THEN GOTO 20
TPW(K) = I LOCATE 6,2 FOR L = 0 TO K PRINT "*" NEXT L
K = K + 1
ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" PLAY 20, "G4" CLS K = 0 GOTO 20 END IF
IF I = 14 THEN CLS FOR N = 0 TO 3 IF OPW(N) = TPW(N) THEN IF N = 3 THEN CLS PLAY 7, "C7D7E7" L = 0 K = 0 N = 0 M = 1 Q = 1 GOTO 30 END IF ELSE IF M = 3 THEN CLS LOCATE 2,1 PRINT "INPUT ERROR" LOCATE 2,2 PRINT "Num." PRINT DEC(M) PLAY 20, "G4G4G4G4G4G4G4" DELAY 2000 CLS K = 0 M = 1 GOTO 10 ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" LOCATE 2,2 PRINT "Num." PRINT DEC(M) PLAY 20, "G4" CLS K = 0 M = M + 1 GOTO 20 END IF END IF NEXT N K = 0 END IF GOTO 20
30IF K <= 4 THEN L = 0 LOCATE 1,1 PRINT "Enter new p/w"
I = KEYDELAY(PADIN(1), 1, 30, 30) IF I = 0 THEN GOTO 30
TTPW(K) = I LOCATE 6,2 FOR L = 0 TO K PRINT "*" NEXT L IF K = 3 THEN CLS PLAY 20, "C7D7E7" L = 0 K = 0 N = 0 M = 1 Q = 1 GOTO 50 END IF K = K + 1
ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" PLAY 20, "G4" CLS K = 0 GOTO 30 END IF
GOTO 30
50 IF K <= 4 THEN
LOCATE 1,1 PRINT "Enter again"
I = KEYDELAY(PADIN(1), 1, 30, 30) IF I = 0 THEN GOTO 50
TPW(K) = I
LOCATE 6,2 FOR L = 0 TO K PRINT "*" NEXT L
IF K = 3 THEN CLS FOR N = 0 TO 3 IF TPW(N) = TTPW(N) THEN IF N = 3 THEN FOR N = 0 TO 3 OPW(N) = TPW(N) NEXT N CLS LOCATE 2,1 PRINT "P/W changed" PLAY 20, "C7D7E7" L = 0 K = 0 N = 0 M = 1 Q = 1 GOTO 40 END IF ELSE IF M = 3 THEN CLS LOCATE 2,1 PRINT "INPUT ERROR" LOCATE 2,2 PRINT "Num." PRINT DEC(M) PLAY 20, "G4G4G4G4G4G4G4" DELAY 2000 CLS K = 0 M = 1 E = 0 GOTO 10 ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" PLAY 20, "G4" CLS K = 0 M = M + 1 GOTO 50 END IF END IF NEXT N END IF
K = K + 1
ELSE CLS LOCATE 2,1 PRINT "INPUT ERROR" PLAY 20, "G4" CLS GOTO 50 END IF
GOTO 50
70R = BYTEIN(0)
CNT = CNT + 1
LOCATE 6,1 PRINT "OPEN"
IF E= 0 AND CNT = 250 THEN CNTT = CNTT + 1 IF CNTT = 5 THEN GOTO 60 ELSE IF R = 21 THEN CNT = 0 CNTT = 0 PT = 1 OUT 22, 0 E = 1 GOTO 70 ELSEIF R = 20 THEN CNT = 0 CNTT = 0 PT = 0 OUT 22, 1 DELAY 5000 E = 0 GOTO 60 END IF END IFl GOTO 70 |
'Programming > 그밖에...' 카테고리의 다른 글
Touch screen Calibration (0) | 2009.09.10 |
---|---|
CIE L*a*b* (0) | 2009.06.01 |
단위환산표 (0) | 2008.05.21 |
어드레싱모드(addressing mode) (0) | 2008.04.01 |
MMU와 MPU의 차이점 (0) | 2008.03.31 |