다중 키입력에 대한 프로그램.

by 이희철 | 2016-09-09 23:21
아두이노

첨부파일

이제 PCB를 중국업체에 발주했으니 PCB가 도착할 때까지 소프트웨어를 다시 작성해 보자...




아두이노에서 delay()함수를 사용해서 키입력을 받는 것은 매우 간단하고도 프로그램이 쉬워서 많이 사용되고 있긴 하지만...


Delay 기간 중에는 어떠한 작업도 수행할 수 없어 인터럽트처리와 같은 서브루틴이 있는 경우 심각한 프로그램 오류가 날 수 있으므로 delay()함수를 사용하는 것은 자제하는 것이 좋다...


delay()함수 대신 millis()함수를 사용하면...


아두이노의 내장타이머의 시간 값을 이용함으로서 다른 작업을 정상적으로 하면서 delay (시간차이)를 구현할 수 있다...



본 회로는 일시적으로 테스트를 위한 것이고 빵판의 크기가 작아서 키는 2개만 사용했으며...



1k Ohm의 풀업저항을 달았다...


물론 아두이노 내장 풀업을 프로그램 세팅으로 지정해서 사용 할 수도 있으나...


그렇게 하면 전원이 공급되고 setup()함수에서 내부 풀업(pull up) 사용 명령이 실행되기 전까지는 스위치값이 정확하게 읽혀지지 않기 때문에 외부에서 풀업저항을 달아주는 것으로 했다...


 


프로그램의 맨 윗줄의 DEBOUNCE는 10을 줌으로서 (10 msec) 정도로 채터링방지를 위한 설정이며...


buttons[] = {36,37}은 36번핀과 37번핀의 2개의 핀에 키입력을 매핑해 놓았고...


키의 숫자가 더 필요할 경우에는 원하는 키 숫자만큼 핀번호를 적어주면 된다...


이 프로그램의 특징은 2가지...


한가지는 배열을 사용해서 키의 갯수에 상관없이 사용할 수 있도록 했고...


buttons[] 배열에는 실제로 사용 할 핀의 핀번호를 써 넣어주면 되므로 대단히 편리하다...




실제로 프로그램을 동작시켜보니...


키를 눌렀을때와 떼었을때 2가지를 정확하게 감지하는 것을 볼 수 있다...


결국 프로그램에서


justpressed[i]의 값으로 키가 눌렸는지...


justreleased[i]의 값으로 키가 떨어졌는지를 체크 할 수 있다...


 


check_switches() 함수를 불러 키의 상태를 읽어서 배열로 저장해 놓고 필요한 키의 상태를 판단할 수 있다...



댓글 0

MADE BY

이희철

요리, 전자회로설계