336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

사용자 삽입 이미지
● 사용부품

     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

+ Recent posts