아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수 헬로앱스 (www.helloapps.co.kr)
키패드 센서 연결 키패드 센서를 아날로그 0핀에 연결합니다. 0번
키패드 센서 값 확인하기 • 아날로그 0번 핀에 키패드 센서를 연결합니다. • 아날로그 센서값 확인하는 기본 코드를 작성하여 센서값을 확인해 봅니다. void setup() { } void loop() a0 = AnalogRead(0) PrintLine(a0) Delay(100)
키패드 센서 값 확인하기 • 각 버튼별 센서값을 종이에 기록합니다. 버튼 색상 센서 값 노랑 빨강 흰색 초록 파랑
키패드 센서 값 확인하기 • 측정된 센서 값에 대해 각각 -10을 한 값과 +10을 한 값을 계산합니다. 버튼 색상 센서 값 -10값 +10 값 노랑 (예) 254 (예) 244 (예) 264 빨강 흰색 초록 파랑
버튼값 리턴 함수 구현하기 • 키패드 버튼이 눌려지 면 각각 1번 부터 5번까 지 번호가 출력되도록 합니다. void loop() { pin = 0 a = AnalogRead(pin) if (a> 608 && a<628) PrintLine(1) } else if (a> 797 && a< 816) PrintLine(2) else if (a> 895 && a<915) PrintLine(3) else if (a> 666 && a<686) PrintLine(4) else if (a> 724 && a<744) PrintLine(5) Delay(100) • 키패드 버튼이 눌려지 면 각각 1번 부터 5번까 지 번호가 출력되도록 합니다.
버튼값 리턴 함수 구현하기 void loop() { a0 = KeyPad(0) PrintLine(a0) Delay(100) } int KeyPad(int pin) { res = -1 a = AnalogRead(pin) if (a> 608 && a<628) res = 1 } else if (a> 797 && a< 816) res = 2 else if (a> 895 && a<915) res = 3 else if (a> 666 && a<686) res = 4 else if (a> 724 && a<744) res = 5 return res • int KeyPad(int pin) 이 름으로 함수를 정의합니 다. • 핀번호를 인수로 받습 니다. • 키패드 버튼이 눌려지 면 각각 1번 부터 5번까 지 번호가 리턴되도록 합니다. • 키패드 버튼이 눌려지 지 않으면 -1이 리턴되 도록 합니다.
다른 프로그램에서 사용할 수 있도록 라이브러리로 만들기 int KeyPad(int pin) { int res = -1; int a = analogRead(pin); if (a> 608 && a<628) res = 1; } else if (a> 797 && a< 816) res = 2; else if (a> 895 && a<915) res = 3; else if (a> 666 && a<686) res = 4; else if (a> 724 && a<744) res = 5; return res; • 라이브러리로 사용하 여면 C 문번에 맞게 수 정해야 합니다. • 프로그램에 해당 함수 만 남겨 놓고 다른 프로 그램은 모두 삭제합니다. • 프로그램을 AnalogKeyPad.h 파일로 저장합니다.
다른 프로그램에서 라이브러리 불러오기 #include <AnalogKeyPad.h> void setup() { } void loop() a0 = KeyPad(0) PrintLine(a0) Delay(100) • 새로운 스크립트 파일을 생 성합니다. • 프로그램 상단에 #include <AnalogKeyPad.h> 를 추가합 니다. • KeyPad 함수를 활용합니다.
실습: 가청주파수 테스트 장치 만들기 • 디지털 2번에 스피커를 연결합니다. • 프로그램 상단에 #include <AnalogKeyPad.h> 를 추가합니다. • 키패드 1번은 진동수를 100씩 증가시킵니다. • 키패드 2번은 진동수를 100씩 감소시킵니다. • 현재의 진동수를 화면에 출력하고 소리를 발생시킵니다.
실습: 가청주파수 테스트 장치 만들기 #include <AnalogKeyPad.h> freq = 0 void setup() { } void loop() a0 = KeyPad(0) if (a0 == 1) freq = freq + 100 PrintLine(freq) else if (a0 == 2) freq = freq - 100 Tone(2, freq, 1000) Delay(100)
실습: 5음계 오르간 연주장치 만들기 • 버튼이 눌려지는 동안 계속 음이 연주됩니다. • 도: 262 (진동수) • 레: 294 (진동수) • 미: 330 (진동수) • 파: 349 (진동수) • 솔: 392 (진동수)
실습: 5음계 오르간 연주장치 만들기 #include <AnalogKeyPad.h> void setup() { } void loop() a0 = KeyPad(0) if (a0 == 1) //도 262 Tone(2, 262, 200) else if (a0 == 2) //레 294 Tone(2, 294, 200) else if (a0 == 3) //미 330 Tone(2, 330, 200) else if (a0 == 4) { //파 349 Tone(2, 349, 200) } else if (a0 == 5) //솔 392 Tone(2, 392, 200) Delay(100)
실습: 5음계 피아노 연주장치 만들기 • 버튼이 눌려지면 0.5초 동안만 음이 연주됩니다. • 도: 262 (진동수) • 레: 294 (진동수) • 미: 330 (진동수) • 파: 349 (진동수) • 솔: 392 (진동수)
실습: 5음계 피아노 연주장치 만들기 #include <AnalogKeyPad.h> Pressed = false void setup() { } void loop() a0 = KeyPad(0) if (a0 == 1 && Pressed == false) //도 262 Tone(2, 262, 500) Delay(500) else if (a0 == 2 && Pressed == false) //레 294 Tone(2, 294, 500) else if (a0 == 3 && Pressed == false) //미 330 Tone(2, 330, 500) else if (a0 == 4 && Pressed == false) { //파 349 Tone(2, 349, 500) Delay(500) } else if (a0 == 5 && Pressed == false) //솔 392 Tone(2, 392, 500) if (a0 > 0) Pressed = true else Pressed = false Delay(100)