스위치를 누르지 않을 때에는 ① 의 if 문에서 PINA에 키입력 신호도 없고 key_press도 ‘NO’ 이므로 ②에서 그냥 key값을 반환한다. key_press 변수의 역할은 key가 최근에 눌린적이 있는지를 표시하주는 flag 역할이다.
<중략>
#define F_CPU 16000000UL
#include <avr/io.h>
#include
#define YES 1
#define NO 0
키입력 및 디바운싱 기능
본 작품에서는 유저가 패스워드 입력 확인과 잠금 기능을 명령할 수 있도록 스위치를 장치했다. 소스의 [404번]에서 키입력을 받을 때는 MCU의 내부 Pull-up 저항을 이용한 키입력 방식을 사용했다.
때문에 DDRx레지스터로 스위치입력핀을 입력모드로 바꿔주었다. 그리고 PORTx
스위치입력
초음파 신장 측정기에는 default_position 설정값을 +,-설정할 수 있는 두 개의 스위치가 장치되어 있다. 이 스위치는 외부 인터럽트 INT 0, 1의 Low level trigger로 동작한다. 두 스위치가 연결된 PORTD의 0,1 pin은 내부 풀업저항으로 설정되어 있기 때문에 스위치를 눌러 Low 상태가 되면 외부 인터럽트
스위치 내부의 접점이 충격에 의하여 여러 번 진동한다. 때문에 이런 진동에 의하여 접점이 여러 번 붙었다가 떨어지게 되고 입력신호도 그만큼 중복되어 입력되게 된다. 이런 바운싱bouncing은 의도치 않은 키입력을 연속으로 야기시키기 때문에 하드웨어적이나 소프트웨어적으로 디바운싱debouncing을 처
회로로 이루어져 있다
<중략>
소스에서는 HEIGHT_MIN, HEIGHT_MAX 상수로 기준을 15cm, 35cm로 정했기 때문에 푸쉬업 시에 신체를 35cm 이상에서 15cm 이하로 몸을 왔다갔다 해야만 카운팅이 될 수 있다. 만약 20cm 정도의 거리에서 몸을 조금씩만 움직이며 제대로 된 푸쉬업 동작을 하지 않을 경우 카운팅이 되지