정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 수동부저모듈 소스에 대해 질문합니다.
임창준 | 2016-12-06

아두이노를 입문해서 공부하고 있는데, 오픈소스를 보고 따라하는 수준이라

소스를 이해 하려고 소스에 주석을 달며 공부하고있습니다.

 

아두이노 떳다떳다 비행기 코드를 해석하려고 하는데 어려워서

질문을 남깁니다. 주석을 달았는데 부족한부분은 수정해주시고

없는 부분은 설명 부탁드립니다.

 

< 수동 부저 센서>

 

int Buzzer = 9; // 핀 번호

int length = 25; // 음의 개수

char notes[] = "edcdeeedddeggedcdeeeddedc"; //음 연주 순서

int beats[] = {3,1,2,2,2,2,4,2,2,4,2,2,4,3,1,2,2,2,2,4,2,2,3,1,8}; // 음의 길이 1/16 기준

int tempo = 100; // 연주속도

 

void playTone(int tone, int duration)

// 플레이 톤함수(tone, duration) 톤과 시간을 입력받음

{

for (long i = 0; i < duration * 1000L; i += tone * 2)

// i는 0부터 i가 연주시간*1000보다 커질때까지

// i = i + tone *2

 

{

digitalWrite(Buzzer, HIGH); //디지털핀(8)의 출력은 HIGH

delayMicroseconds(tone); // 마이크로초 동안 딜레이 (tone)만큼

digitalWrite(Buzzer, LOW); // 디지털핀 8의 출력은 LOW

delayMicroseconds(tone); // 마이크로초 동안 딜레이 (tone)만큼

}

}

void playNote(char note, int duration) {

// 플레이 톤함수(tone, duration) 톤과 시간을 입력받음

char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };

// 도 레 미 파 솔 라 시 도 순서입니다.

 

int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

// tone 함수는 음을 연주할 수 있습니다.

//도 = 956, 레 = 1014 ~ 높은 도 = 1915로 역순입니다.

 

for (int i = 0; i < 8; i++)

{

if (names[i] == note)

{

playTone(tones[i], duration);

}

}

}

void setup()

{

pinMode(Buzzer, OUTPUT);

}

void loop()

{

for (int i = 0; i < length; i++)

{

if (notes[i] == ' ')

{

delay(beats[i] * tempo);

} else

{

playNote(notes[i], beats[i] * tempo);

}

delay(tempo / 2);

}

}

이전글   |    브레드 보드 -버스, +버스 활용법 2016-12-04
다음글   |    아두이노 온/습도 센서 질문합니다. 2016-12-06