본문 바로가기
system/SBC

[Galileo-Gen2] 아두이노 진동 센서를 이용한 미디 출력

by lifeseed 2014. 10. 25.

갈릴레오 보드에서 기본 예제들을 이용하여 테스트를 수행하였다.

 

1. LED Control

지난 번 시작하기 예제에서 마지막 Blink 예제가 바로 13번 핀을 Output 모드로 설정하여 on-board 에 있는 LED를 컨트롤 한다.

 

2. 진동센서 Control

진동 센서를 이용하여 미디출력 테스트를 해 보았다.

기본 도음의 주파수는 261.63 Hz 인데, 3.822 msec 주기로 진동센서를 High Low 를 설정해주면 된다.

DigitalWrite(pin, High)

delayMicroseconds(3882)

DigitalWrite(pin, Low)

delayMicroseconds(3882)

를 일정 시간 동안 반복하면 도 음을 들을 수 있다.

 

즉 아래와 같이 1~8 의 key 값을 도 ~ 높은도로, tempo는 1을 16분음표로 설정하는 note 함수를 만들었다.

 

  1. /*
  2.   tempo
  3.   1 : 1/16
  4.   2 : 1/8
  5.   3 : 1/8 + 1/16
  6.   4 : 1/4
  7.   8 : 1/2
  8. */
  9. void note(int key, int tempo)
  10. {
  11.   long time = 1000000/8*tempo;
  12.   long dur;
  13.  
  14.   switch(key)
  15.   {
  16.     case 1: dur = 3822; break;  // do
  17.     case 2: dur = 3405; break;  // re
  18.     case 3: dur = 3034; break;  // mi
  19.     case 4: dur = 2863; break;  // fa
  20.     case 5: dur = 2551; break;  // sol
  21.     case 6: dur = 2273; break;  // ra
  22.     case 7: dur = 2025; break;  // si
  23.     case 8: dur = 1910; break;  // do
  24.     default: dur = 3822; break;
  25.   }
  26.   for(long i=0; i<time; i=i+dur*2)
  27.   {
  28.     digitalWrite(vib, HIGH);
  29.     delayMicroseconds(dur);
  30.     digitalWrite(vib, LOW);
  31.     delayMicroseconds(dur);
  32.   }
  33. }

 

이 함수를 이용하여 4분음표 도레미파솔라시도 를 출력하려면 아래와 같이 코딩하면 된다.

note(1, 4);

note(2, 4);

note(3, 4);

note(4, 4);

note(5, 4);

note(6, 4);

note(7, 4);

note(8, 4);

 

학창시절에 불렀던 도레미송을 기본8개의 음으로 재생해 보았다.

스위치를 연결하여 스위치가 눌러졌을 경우 도레미 송을 끝까지 재생하는 코드 이다.

 

  1. // Pin 12 has an Vibrator connected on most Arduino boards.
  2. int vib = 12;
  3. int pushButton = 2;
  4.  
  5. // the setup routine runs once when you press reset:
  6. void setup() {
  7.   // initialize the digital pin as an output.
  8.   pinMode(vib, OUTPUT);
  9.   pinMode(pushButton, INPUT);
  10. }
  11.  
  12. void loop() {
  13.   if(digitalRead(pushButton)==1)
  14.   {
  15.     note(1, 6);
  16.     note(2, 2);
  17.     note(3, 6);
  18.     note(1, 2);
  19.     note(3, 4);
  20.     note(1, 4);
  21.     note(3, 8);
  22.    
  23.     note(2, 6);
  24.     note(3, 2);
  25.     note(4, 2);
  26.     note(4, 2);
  27.     note(3, 2);
  28.     note(2, 2);
  29.     note(4, 12);
  30.     delay(500);
  31.    
  32.     note(3, 6);
  33.     note(4, 2);
  34.     note(5, 6);
  35.     note(3, 2);
  36.     note(5, 4);
  37.     note(3, 4);
  38.     note(5, 8);
  39.    
  40.     note(4, 6);
  41.     note(5, 2);
  42.     note(6, 2);
  43.     note(6, 2);
  44.     note(5, 2);
  45.     note(4, 2);
  46.     note(6, 12);
  47.     delay(500);
  48.    
  49.     note(5, 6);
  50.     note(1, 2);
  51.     note(2, 2);
  52.     note(3, 2);
  53.     note(4, 2);
  54.     note(5, 2);
  55.     note(6, 12);
  56.     delay(500);
  57.    
  58.     note(6, 6);
  59.     note(2, 2);
  60.     note(3, 2);
  61.     note(4, 2);
  62.     note(5, 2);
  63.     note(6, 2);
  64.     note(7, 12);
  65.     delay(500);
  66.    
  67.     note(7, 6);
  68.     note(3, 2);
  69.     note(4, 2);
  70.     note(5, 2);
  71.     note(6, 2);
  72.     note(7, 2);
  73.     note(8, 12);
  74.     delay(500);
  75.    
  76.     note(8, 2);
  77.     note(7, 2);
  78.     note(6, 4);
  79.     note(4, 4);
  80.     note(7, 4);
  81.     note(5, 4);
  82.     note(8, 12);
  83.     delay(500);
  84.    
  85.     note(1, 2);
  86.     note(2, 2);
  87.     note(3, 2);
  88.     note(4, 2);
  89.     note(5, 2);
  90.     note(6, 2);
  91.     note(7, 2);
  92.     note(8, 4);
  93.     note(5, 4);
  94.     note(8, 4);
  95.     delay(500);
  96.   }
  97.  
  98.   delay(100);
  99. }