아두이노 코딩-47: 클레멘타인 연주와 LED wave 영상

in #kr7 years ago (edited)

그림_01.png

웨이브를 타는듯한 다이나믹한 LED 디스플레이와 클레멘타인 아두이노 음악 연주를 합하여 작품을 구상해 보자.

왜 매번 클레멘타인만 우려먹느냐는 의견도 있을 수 있겠지만 음악에 그다지 조예가 없는데다 단지 재미 위주의 코딩을 하다 보니 아이디어 적용 대상이 죄없는 클레멘타인이 선택 되었을뿐이니 많은 양해를 바란다.

LED 배선은 barGraph 배선을 이용하되 크기rk 작은 빨간색 LED를 청색 LED 와 병렬 배선하였다. 출력이 비슷한 LED 라면 함께 켜지나 출력이 상당히 달라 HIGH 조건하에서 청색 LED 는 바이패스하고 빨간색 LED만 ON 된다.

그림_02.png

클레멘타인 연주곡을 간단히 수정하자. 클레멘타인 곡의 계명에 맞춰 ON 시킬 LED 번호를 배열로 선언해 정의해 둔다. melody[] 배열과 같은 구조를 이용한다.

그림_03.png

아래는 디지털 핀 배선 할당에 관한 설명이다. barGraph 배선을 그대로 이용한다. 단 하드웨어작으로 5개 빨간 LED를 청색 LED 와 병렬로 연결할 따름이다.

그림_04.png

클레멘타인 연주곡의 원래 코드는 전혀 수정할 필요가 없으며 단지 LED wave 효과를 주기 위해서 tone() 명령 앞에서 LED 3개씩을 ON 하도록 하자. 하나씩 ON하면 너무 단조로와 우울한 분위기를 느낄 수도 있다.
LED 가 ON 되면 지속 시간이 필요한데 여기서는 delay() 명령을 사용할 필요 없아 tone() 명령이 일정시간 지속되므로 tone() 이 끝나는 즉시 LED를 OFF 시킨도록 한다.

그림_05.png

다음이 동영상을 감상해 보자. 핸드폰 동영상 촬영에서 노출 값을 최대한 줄였음에도 LED 가 너무 밝아 화면 번짐이 다소 심한 편이다. 각자 제작하여 실제 눈으로 보면 훨씬 퀄리티가 높은 영상을 즐길 수 있을 것이다.

//toneMelody_Clementine_lyric_LED_wave_01


int speakerPin = 13;#include "pitches.h"

// notes in the melody:
int melody[] = {NOTE_G3, NOTE_G3, NOTE_G3, NOTE_D3, NOTE_B3, NOTE_B3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_D4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_A3,
NOTE_A3, NOTE_B3, NOTE_C4, NOTE_C4,NOTE_B3,NOTE_A3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_A3, NOTE_D3, NOTE_FS3, NOTE_A3, NOTE_G3,
NOTE_G3, NOTE_G3, NOTE_G3, NOTE_D3, NOTE_B3, NOTE_B3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_D4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_A3,
NOTE_A3, NOTE_B3, NOTE_C4, NOTE_C4,NOTE_B3,NOTE_A3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_A3, NOTE_D3, NOTE_FS3, NOTE_A3, NOTE_G3
};

int LED[] = {7, 7, 7, 4, 9 ,9, 9, 7, 4, 6, 8, 8, 7, 6, 5,
5, 6, 7, 7, 6, 5, 6, 4, 4, 6, 5, 1, 3, 5, 4,
7, 7, 7, 4, 9, 9, 9, 7, 4, 6, 8, 8, 7, 6, 5,
5, 6, 7, 7, 6, 5, 6, 4, 4, 6, 5, 1, 3, 5, 4
};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 4, 4, 1,
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 3, 4, 1,
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 4, 4, 1,
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 3, 4, 1
};

int pinLED[] ={2,3,4,5,6,7,8,9,10,11};
int i;

void setup() {
for( i = 0; i<10; i++ ) {
pinMode(pinLED[i],OUTPUT);//10개의 LED 단체로 출력 모드 선언
}

for (int thisNote = 0; thisNote < 60; thisNote++) {
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000 / noteDurations[thisNote];
digitalWrite(LED[thisNote]-1, HIGH);
digitalWrite(LED[thisNote], HIGH);
digitalWrite(LED[thisNote]+1, HIGH);
tone(speakerPin, melody[thisNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(speakerPin);// stop the tone playing:
digitalWrite(LED[thisNote]-1, LOW);
digitalWrite(LED[thisNote], LOW);
digitalWrite(LED[thisNote]+1, LOW);
}
}

void loop() {
// no need to repeat the melody.
}//끝

Sort:  

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
http://www.instructables.com/id/How-to-Play-the-Song-Scary-Monsters-and-Nice-Sprit/

저는 요새 nodejs로 EDM만드는 거 해보고 있는 데 요것도 재미있어 보이네요 :) 좋은 글 감사합니다. 잘 읽었습니다 ^^

codingart 님. 이거 LED가 이렇게 많은데, 불 다 어떻게 켜세요? 프로그래밍 할 때는 PC로 연결하니깐 괜찮아도 나중에 밖에 둘 때는 뭘로 하세요?

9v 전지 연결 해서 몇회 쓴후 다 회수해서 롱노즈로 펴서 새부품처럼 재생해 보관하다가 필요하면 또 사용합니다.

우와 9V를 사용하시는 군요. ㅇ_ㅇ 아 ~ 그래서 그 많은 게 가능하네요. 아니, 잠깐 재생도 되는 거에요? 헐...

9v전지 사용 예를 간단히 정리해서 한번 올리도록 하겠습니다.

예. 진짜 신기하네요. ㅎㅎㅎ ^^ 그게 쫌 다른 거 같아요. ㅎㅎㅎ