반응형

피에조(스피커)의 소스코딩을 해석하겠다.

 

이 소스코딩만 이해한다면 피에조로 간단한 노래는 만들 수 있을 것이다.

 

 

 

 int BuzzerPin = 9; // 피에조 핀버튼또한 0~13번 아무핀이나 사용가능하다.

 char noteNames[] = {'C','D','E','F','G','a','b','c','d'}; // 도 = C 레 = D 이런식으로 노트를 구성한다.
                    //도ㅡ레ㅡ미ㅡ파ㅡ솔ㅡ라ㅡ시ㅡ도
 int frequency[] = {1047,1175,1319,1397,1568,1760,1976,2093,2349}; // 더 많은 음의 주파수는 검색하여 찾기 바란다.

 byte noteCount = sizeof(noteNames); //음계의 갯수를 구한다. 지금은 도~ 도까지니 8개.

 

 //char score[] = "CCGGaaGFFEEDDC  GGFFEEDGGFFEED  CCGGaaGFFEEDDC"; //작은별악보
 //char score[] = "GGaaGGE GGEED  GGaaGGE GEDEC"; //학교종악보
 char score[] = "GEE FDD CDEFGGG  GEE FDD CEGGC DDDDDEF EEEEEFG GEE FDD CEGGC"; // 나비야악보

 byte scoreLen = sizeof(score); // 악보의 크기를 구한다.
//ex) "GEE FDD"면 크기는 7이다.(byte는 글자하나당 1로 취급)

 

void setup()
{
        pinMode(BuzzerPin,OUTPUT); // 소리를 내니 OUTPUT으로 지정한다.
}

void loop()
{
         for (int i=0 ; i<scoreLen ; i++) // i는 0부터 악보크기만큼 반복한다.
        {    //( 악보를 연주해야되니 악보크기만큼 반복 )
              int duration = 150; // 박자를 의미한다
              playNote(score[i], duration); // 연주 함수를 만든다.이때 악보와 박자를 가져간다.
         }
          delay(5000); // 연주가 끝나면 5초 딜레이
      }

      void playNote(char note, int duration) // 노트는 score[i]의 배열이니 note로 가져올수 있다.
     {
         for (int i=0 ; i<noteCount ; i++) // 도~도까지 반복 검색한다.
         {
              if (noteNames[i] == note) // 만약 음계와 악보에 있던 음계가 일치한다면
               {
                  tone(BuzzerPin, frequency[i], duration); // 음이 울린다.
               }
          }
       delay(duration); // 음이울리고 박자만큼 delay를 제공한다.
}

 

 

 

다소 어려울 수도있다. 필자도 처음에는 해석하는데 힘이 들었다.

 

 하지만 이것만 해석한다면 피에조를 완벽하게는 아니지만 능숙하게 사용할 수 있을 것이다.

반응형

'Applied > Arduino' 카테고리의 다른 글

line tracing with sensor moudule ( 라인트레이서 )  (0) 2014.02.15
ServoMotor  (0) 2014.02.15
Push Button  (0) 2014.01.15
LED fading  (0) 2014.01.15
LED Blink ( on / off )  (0) 2014.01.15