강의내용 강의내용
Ⅰ Buzzer를 이용한 음계를
만들어 봅시다
소개
1. 소개
- Buzzer를 이용하여 음계를 만들어 봅시다.
- 부저에 HIGH와 LOW를 주어 진동으로써 음계를 만듭니다.
2. 음계 정의
#define c 3830 // 261 Hz
#define d 3400 // 294 Hz
#define e 3038 // 329 Hz
#define f 2864 // 349 Hz
#define g 2550 // 392 Hz
#define a 2272 // 440 Hz
#define b 2028 // 493 Hz
#define C 1912 // 523 Hz
#define R 0 // 쉼표
- 좌측은 음계를 정의한 것으로
c 도, d 레, e 미, f 파, g 솔, a 라, b 시, C 옥타브 도, R 쉼표
- 부저를 사용하기 위해서는 PWM핀을 사용하여야 함.
※PWN핀은 디지털 핀 3, 5, 6, 9. 10, 11임
- 그렇지 않으면 아무리 멜로디를 넣는다 해도 픽!~~~~~ 거리는 음 하나만
들릴것임.
- PWM핀은 디지털 핀 3, 5, 6, 9, 10, 11 입니다.
- 위는 재생할 음계와 그 길이를 넣은 배열임
- 멜로디와 비트갯수는꼭 맞추어야 함.
- 숫자가 길면 길수록 재상시간은 길어짐.
- 위는 도레미파솔라시도(옥타브) 쉬고 도(옥타브)시라솔파미레도 를 재생한 3.1 음계와 길이
3. 재생할 음계와 그 길이를 넣은 배열
int melody[] = {c, d, e, f, g, a, b, C, R, C, b, a, g, f, e, d, c};
int beats[] = {32,32,32,32,32,32,32,32,80,32,32,32,32,32,32};
3.2 MAX_COUNT
3. 재생할 음계와 그 길이를 넣은 배열
int MAX_COUNT = sizeof(melody) / 2; //연주할 전체적인 멜로디 길이 long tempo = 10000; // 전반적인 템포
int pause = 1000; // 음표 사이 일시 중지 그래야 음이 제대로 들립니다.
int rest_count = 100; // 쉼표의 길이정의
- MAX_COUNT는 연주할 전체적인 멜로디의 사이즈를 나타냄.
- tempo는 전반적인 템포시간을 나타냄.
- pause는 음표를 재생할 때 중간중간 일시중지를 하는 역할로 중간중간 중지를 하지 않으면 음이 뭉개져서 이상하게 들릴 것임.
- rest_count는 for문을 돌면서 일정길이 만큼 음을 쉼.
예제
void melody_play() {
// 설정한 멜로디와 비트를 순서대로 재생합니다.
for(int I = 0; I < MAX_COUNT; i++) // MAX_COUNT만큼 for문을 돌립니다.
{ _tone = melody[i];
beat = beats[i];
duration = beat * tempo; // 위에서 정의한 비트와 템포로 설정 타이밍을 정함 playTone();
// 음표사이의 일시정지
delayMicroseconds(pause);
} }
4.1 melody_play()
4. 코드
예제
void playTone() {
long elapsed_time = 0;
if (_tone > 0) // 멜로디이면 쉼표일 땐 부저를 울리면 안됩니다.
{ // 설정 타이밍 만큼 부저에 하이와 펄스를 줌 while (elapsed_time < duration )
{
digitalWrite(speakerOut, HIGH);
delayMicroseconds(_tone / 2);
// DOWN
digitalWrite(speakerOut, LOW);
delayMicroseconds(_tone / 2);
elapsed_time += (_tone);
} }
4.2 playTone ()
4. 코드
예제
else // 음계가 아닌 쉼표일 때 일정 길이만큼 쉼, dealy { for( int j = 0; j < rest_count; j++)
{ delayMicroseconds(duration);
} } }
- 부저의 멜로디를 재생하기 위해서는 2개의 함수부분이 필요
- 먼저 void melody_play() 부분에 갔다가 void playTone()함수로 이동하여 부져에 HIGH LOW신호로 음을 만듬.
4.2 playTone ()
4. 코드
3. 결론
- 부저를 이용한 멜로디 재생 방법에 대해서 알아보았습니다.