풀업이 된 푸시버튼이 2번 핀에 연결되었다고 가정하자. 이 버튼은 외부에 풀업이 된 상태이기 때문에 안 눌려진 상태에서는 1값이 읽혀지고 눌려지면 0값이 읽힌다. 부저는 11번핀에 연결되었다고 가정한다.


 이 때 버튼이 눌려지는 시점에서 멜로디가 울리도록 하는 프로그램은 다음과 같다. tone()함수는 ISR 내부에서는 정상적으로 동작하기 않기 때문에 인터럽트 기능은 사용할 수 없다는 점에 유의하자.


#include "pitches.h"
#define BUZ 11
#define K 2

void setup() {
 pinMode(K, INPUT);
}

int iBtnPrev = 1; //버튼의 이전 상태값을 저장하는 변수

void loop() {
 int iBtn = digitalRead(K);
 if (iBtn == 0 && iBtnPrev == 1)
   melody();
 iBtnPrev = iBtn;
}

void melody() {
 tone(BUZ, NOTE_C4);
 delay(100);
 tone(BUZ, NOTE_D4);
 delay(100);
 tone(BUZ, NOTE_E4);
 delay(100);
 noTone(BUZ);
}


이 프로그램을 다운로드하면 버튼이 눌리는 순간 ‘도레미’ 멜로디가 울린다.



Posted by 살레시오