EEPROM 기능을 이용해서 구현한 Door Lock 구현 동영상입니다.


선명하게 보이지는 않는데, FND Display 에 숫자가 바뀌어 출력되는 정도는 확인하실 수 있으실 거라고 생각합니다.


아쉽게도 폰에서 찍은 동영상이 왼쪽으로 회전되어서 저장이 되었네요;;;


물론 동영상 인코딩으로 다시 재회전시키는 방법도 있지만... 귀찮아서 ^^;;


다음에 기회가 되면 다시 올리도록 하겠습니다.





영상만 보면 상황이 잘 이해 안갈 수도 있어서 부가 설명을 덧 붙이자면,


1) #키를 눌러서 비밀번호를 설정

2) *키를 눌러서 비밀번호 입력-> 맞으면 7777 틀리면 4444


제일 처음 #키 누르고 1234 입력해 비밀번호 1234로 설정 (비밀번호 입력중에는

어떤 숫자인지 알지 못하게 1이 계속해서 뜹니다. 그리고 비밀 번호 설정 후엔 2222가 뜹니다.)


그 후 *키를 누릅니다. 그러면 3333이 뜹니다. 그리고 1234를 순서대로 누르면 맞다고 7777이 뜨고,

다른 숫자(4444)를 누르면 틀렸다고 4444가 뜹니다.


CPU 리셋 이후에 다시 * 키를 눌러서 1234를 눌러도 그대로 맞다고 7777을 띄우는 것을 보면,

EEPROM에 정확하게 비밀번호가 저장되었음을 확인할 수 있습니다.



HBE-MCU-All in One 키트에는 'Push Button'과 'LED' 에 대한 포트가 있습니다.

이번 포스팅에서는 Push Button 을 누를 때마다 LED가 다양하게 제어되는 형태의 프로그램에 대한 코드를

설명하려고 합니다. 각각 Push Button 에 대해서 LED는 다음과 같은 반응을 보일 수 있습니다.


그리고 소스 코드는 다음과 같습니다.


#include <avr/io.h> void my_delay(unsigned long x) { while(x--); } int main(void) { int i; unsigned char state, tmp; /* Push Button - 포트 D */ DDRD = 0x00; // 입력 /* LED - 포트 B */ DDRB = 0xFF; // 출력 while(1) { state = PIND; switch(state) { case 0x01: // 0번 버튼 PORTB = 0xFF; // 모든 LED가 켜진다. break; case 0x02: // 1번 버튼 PORTB = 0xAA; // 짝수번째 LED가 켜진다. break; case 0x04: // 2번 버튼 PORTB = 0x55; // 홀수번째 LED가 켜진다. break; case 0x08: // 3번 버튼 // 다른 스위치가 눌릴때까지 모든 LED를 깜빡인다. while(1) { PORTB = 0x00; // 모든 LED 꺼진다. my_delay(50000); if(PIND != 0x08 && PIND != 0x00) // 다른 스위치가 눌리는지 확인. break; PORTB = 0xFF; // 모든 LED 켜진다. my_delay(50000); if(PIND != 0x08 && PIND != 0x000) break; } break; case 0x10: // 4번 버튼 // 다른 스위치가 눌릴때까지 LED 1개 켜서 좌로 이동 while(1) { tmp = 128; for(i=0; i<8; i++) { PORTB = tmp; tmp = tmp >> 1; my_delay(50000); if(PIND != 0x10 && PIND != 0x00)// 다른 스위치가 눌리는지 확인. goto Finish1; } PORTB = 0x00; } Finish1: break; case 0x20: // 5번 버튼 // 다른 스위치가 눌릴때까지 LED 1개 켜서 좌로 이동 while(1) { tmp = 1; for(i=0; i<8; i++) { PORTB = tmp; tmp = tmp << 1; my_delay(50000); if(PIND != 0x20 && PIND != 0x00)// 다른 스위치가 눌리는지 확인. goto Finish2; } PORTB = 0x00; } Finish2: break; case 0x40: // 6번 버튼 PORTB = 0xF0; // 상위 4비트(LED4~LED7)만 켠다. break; case 0x80: // 7번 버튼 PORTB = 0x0F; // 하위 4비트(LED0~LED3)만 켠다. break; default: // 아무런 버튼도 누르지 않은 경우. PORTB = 0x00; // 모든 LED가 꺼진다. } } }


다음은 각각 결과에 대한 사진입니다.



▲ 0번 버튼을 누른 경우, LED가 전부 켜진다.


▲ 1번 버튼을 누른 경우, LED가 짝수 번째만 켜진다.


▲ 2번 버튼을 누른 경우, LED가 홀수 번째만 켜진다.


▲ 3번 버튼을 누른 경우, LED가 깜빡인다.


▲ 4번 버튼을 누른 경우, LED가 1개씩만 좌로 이동한다.


▲ 5번 버튼을 누른 경우, LED가 1개씩만 우로 이동한다.


▲ 6번 버튼을 누른 경우, LED가 상위 4비트(LED4~LED7)만 켜진다.


▲ 7번 버튼을 누른 경우, LED가 하위 4비트(LED0~LED3)만 켜진다.


+ Recent posts