반응형
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- usb부팅
- fdisk
- 우분투
- QT
- CMSIS
- Marsboard
- lg smart recovery
- Galileo Gen2
- Python
- galileo
- pyside6
- smartrobot board
- Z435
- ICbanq
- 허큘렉스
- ft2232
- Boyue
- U-boot
- HerkuleX
- 마스보드
- DRS-0101
- emIDE
- ares note
- openocd
- 갈릴레오
- ubuntu
- JTAG
- Cortex-M3
- STM32F10x
- 동부로봇
Archives
- Today
- Total
Life Seed
[Galileo-Gen2] 아두이노 진동 센서를 이용한 미디 출력 본문
갈릴레오 보드에서 기본 예제들을 이용하여 테스트를 수행하였다.
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 함수를 만들었다.
-
/*
-
tempo
-
1 : 1/16
-
2 : 1/8
-
3 : 1/8 + 1/16
-
4 : 1/4
-
8 : 1/2
-
*/
-
void note(int key, int tempo)
-
{
-
long time = 1000000/8*tempo;
-
long dur;
-
-
switch(key)
-
{
-
case 1: dur = 3822; break; // do
-
case 2: dur = 3405; break; // re
-
case 3: dur = 3034; break; // mi
-
case 4: dur = 2863; break; // fa
-
case 5: dur = 2551; break; // sol
-
case 6: dur = 2273; break; // ra
-
case 7: dur = 2025; break; // si
-
case 8: dur = 1910; break; // do
-
default: dur = 3822; break;
-
}
-
for(long i=0; i<time; i=i+dur*2)
-
{
-
digitalWrite(vib, HIGH);
-
delayMicroseconds(dur);
-
digitalWrite(vib, LOW);
-
delayMicroseconds(dur);
-
}
-
}
이 함수를 이용하여 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개의 음으로 재생해 보았다.
스위치를 연결하여 스위치가 눌러졌을 경우 도레미 송을 끝까지 재생하는 코드 이다.
-
// Pin 12 has an Vibrator connected on most Arduino boards.
-
int vib = 12;
-
int pushButton = 2;
-
-
// the setup routine runs once when you press reset:
-
void setup() {
-
// initialize the digital pin as an output.
-
pinMode(vib, OUTPUT);
-
pinMode(pushButton, INPUT);
-
}
-
-
void loop() {
-
if(digitalRead(pushButton)==1)
-
{
-
note(1, 6);
-
note(2, 2);
-
note(3, 6);
-
note(1, 2);
-
note(3, 4);
-
note(1, 4);
-
note(3, 8);
-
-
note(2, 6);
-
note(3, 2);
-
note(4, 2);
-
note(4, 2);
-
note(3, 2);
-
note(2, 2);
-
note(4, 12);
-
delay(500);
-
-
note(3, 6);
-
note(4, 2);
-
note(5, 6);
-
note(3, 2);
-
note(5, 4);
-
note(3, 4);
-
note(5, 8);
-
-
note(4, 6);
-
note(5, 2);
-
note(6, 2);
-
note(6, 2);
-
note(5, 2);
-
note(4, 2);
-
note(6, 12);
-
delay(500);
-
-
note(5, 6);
-
note(1, 2);
-
note(2, 2);
-
note(3, 2);
-
note(4, 2);
-
note(5, 2);
-
note(6, 12);
-
delay(500);
-
-
note(6, 6);
-
note(2, 2);
-
note(3, 2);
-
note(4, 2);
-
note(5, 2);
-
note(6, 2);
-
note(7, 12);
-
delay(500);
-
-
note(7, 6);
-
note(3, 2);
-
note(4, 2);
-
note(5, 2);
-
note(6, 2);
-
note(7, 2);
-
note(8, 12);
-
delay(500);
-
-
note(8, 2);
-
note(7, 2);
-
note(6, 4);
-
note(4, 4);
-
note(7, 4);
-
note(5, 4);
-
note(8, 12);
-
delay(500);
-
-
note(1, 2);
-
note(2, 2);
-
note(3, 2);
-
note(4, 2);
-
note(5, 2);
-
note(6, 2);
-
note(7, 2);
-
note(8, 4);
-
note(5, 4);
-
note(8, 4);
-
delay(500);
-
}
-
-
delay(100);
-
}
반응형