• 검색 결과가 없습니다.

2. 음계 정의

N/A
N/A
Protected

Academic year: 2022

Share "2. 음계 정의"

Copied!
10
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

강의내용 강의내용

Ⅰ Buzzer를 이용한 음계를

만들어 봅시다

(2)

소개

1. 소개

- Buzzer를 이용하여 음계를 만들어 봅시다.

- 부저에 HIGH와 LOW를 주어 진동으로써 음계를 만듭니다.

(3)

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임

- 그렇지 않으면 아무리 멜로디를 넣는다 해도 픽!~~~~~ 거리는 음 하나만

들릴것임.

(4)

- 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};

(5)

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문을 돌면서 일정길이 만큼 음을 쉼.

(6)

예제

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. 코드

(7)

예제

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. 코드

(8)

예제

else // 음계가 아닌 쉼표일 때 일정 길이만큼 쉼, dealy { for( int j = 0; j < rest_count; j++)

{ delayMicroseconds(duration);

} } }

- 부저의 멜로디를 재생하기 위해서는 2개의 함수부분이 필요

- 먼저 void melody_play() 부분에 갔다가 void playTone()함수로 이동하여 부져에 HIGH LOW신호로 음을 만듬.

4.2 playTone ()

4. 코드

(9)

3. 결론

- 부저를 이용한 멜로디 재생 방법에 대해서 알아보았습니다.

(10)

참조

관련 문서

보충해주어 빈곤노동자 가구의 최저생활을 보 장해주고 대신 거주지 내에서 정착하도록 하고 이주를 허용치 않는 정책을 씀. 이 제도는 농번기 때 많은 노동력을 필요로 하는

자신이 원하는 만큼 생산하는 것이 아니라 타인이 요구 하는 양만큼 생산한다... 장현이가 감기에 걸리면 동네 약국이나 보건소에 가지만, 작년에 할아버지가

일반계약의 성립과 효력 1 계약의 요건 ① 청약offer과 승낙acceptance – 의사일치가 있어야 계약성립 – 일반계약에서는 청약의 일부 승낙, 승낙기간 초과, 상당기간 을 초과한 후 승낙은 계약 불성립 – 보험계약은 청약과 보험료 상당액의 전부 또는 일부를 받았 을 때 30일 이내에 낙부통지를 하지 않으면 승낙으로

면제 승인교과 성적은 Pass로 인정하며 학점으로는 인정하지 않음 나.. 영어교과 면제를 받고자 하는 학생은

우리 가운데 필요한 것을 가질 만큼 운이 좋은 사람들에 게는 두려움을 경험하는 것이 우리에게 중요한 것을 올바로 인식하고 명확히 하는 데 도움을 줄 수

만약 학생들이 그 관계를 (교사에 의해) 자신들에게 설명되게 하지 않으면, 몇몇 학생들은 당연하게도 그 분자를 단순히 둥근 물체로 시각화하고, 다른 학 생들은 그것을

그러나 그 프로그램이 작동하게 하려고 애쓸 때 Jenny 는 단어를 범주에 따라, 즉 모든 동사는 한 버킷에, 모든 명사는 또 다른 버킷에 분류해야 하고 그렇게 하지

KISTI야 말로‘strike’를 멋지게 해냈을 때처럼 연구자들이 R&amp;D를 할 때 부딪히는 여러 문제들을 시원하게 확 풀어주는 기관이어야 하지 않을까,