Making MIDI Controller #4

구종회 (JongHoe Koo)
Making MIDI Controller
4 min readJun 17, 2015

미디 컨트롤러 만들기, 4번째 입니다. 이번에도 아두이노 프로그래밍입니다. 좀 더 진도가 나갑니다.

지난번에 프로그램의 구조를 살펴 보았습니다. 이번에는 프로그램의 구조를 좀 더 구체적으로 하여 실제 동작하는 부분까지 가 보겠습니다.

하드웨어 세팅은 전에 보여드린 세팅을 위의 사진 처럼 배치하여 새로 그려 보았습니다. 회로 자체는 지난번과 같습니다.

LED는 극성이 있으니 잘 보고 꽂아 주세요. LED 안쪽에 보면 넓은 쪽과 좁은 쪽이 있습니다. 그림을 보고 똑 같이 꽂아야 합니다. 아직 미디 단자로 출력은 안 되는 상황이니 위쪽의 미디 단자와 연결된 케이블 들은 연결하지 않아도 상관 없습니다.

자 그럼, 이제 소스코드를 볼 까요.

지난 번에 구조를 잡았던 형태에서 조금 더 구체적인 표현이 들어 갔습니다. 지난 번이 막연한 상태였다면 이번에는 실제 동작을 하는 상태입니다. 이대로 작성하고 아두이노에 올리면 버튼을 누를 때 LED가 켜지고 꺼지는 모습을 볼 수 있습니다.

— 이 코드대로 하면 브래드 보드에 장착한 LED가 아두이노 보드의 LED와 반대로 동작하도록 되어 있습니다. 영상에서도 큰 LED가 보드에 붙어 있는 LED와 반대로 켜지고 꺼지는 것을 볼 수 있습니다.

코드는 몇 줄 안되는데, 영상의 설명으로는 코드가 더 복잡해야 할 것 같지요. 지금은 큰 흐름을 파악하는게 중요합니다.

프로그램의 큰 줄기를 확인하기

setup()에서 입출력 단자를 정의하고, 초기 상태를 지정합니다.

loop()에서 반복되는 일을 지정합니다. 여기서 보면 버튼이 눌러졌는지 확인해서 눌러졌으면 정해진 어떤 일을 하고, 그렇지 않으면 아무 일도 없이 1번의 루프를 끝냅니다.

여기서 ‘정해진 어떤 일’은 22번~25번 줄에 써 있는 내용들이지요. if 뒤에 나오는 { } 로 묶여 있는 문장들입니다.

22번 줄, LED를 끄는 명령어입니다. 대기 상태가 아니라는 표시를 하는거죠.

23번 줄, QLab에 MIDI신호로 GO 신호를 보냅니다. 아직은 실제 동작을 하지않는 함수지만 일단 써 놓습니다. 실제 동작을 하지 않아도 문법상의 문제가 없으므로 에러 없이 통과합니다.

24번 줄, 딜레이 명령으로 시간을 좀 끌어 봅니다. 버튼이 다닥~ 2번 눌리는 경우나 그 이상 눌러졌을 때를 대비해 무시하는 겁니다. 아두이노에 들어 있는 프로세서가 8MHz라는 엄청난 속도로 업무를 처리하고 있기 때문에(보드에 달려 있는 클럭은 무려 16MHz나 됩니다) 버튼이 눌러졌는지 확인하는 것도 1초에 백만번 넘게 검사할 수 있습니다.

물론 우리가 흔히 쓰고 있는 컴퓨터는 기가급 속도니까 8MHz나 16MHz 따위는 비교가 되지 않을 속도긴 합니다. ^^;

25번 줄, 해야 할 일을 다 했으니 다시 LED를 켜 놓고 일을 마칩니다. 대기상태로 돌아가겠죠.

전체적인 그림이 그려지십니까? 각 줄의 명령어가 어떻게 LED를 끈단 말인가? 혹은 저게 어떻게 명령어를 내 보낸단 말이지? 하는 의문을 해결하기 보다 흐름을 이해하시길 바랍니다.

미처 설명하지 못한 부분들

9~11번 줄에 있는 const int 표시는 해당 단어 뒤에 나오는 숫자와 단어를 동일시 한다는 뜻입니다. 프로그램에서 delayVal 이라는 자리에 1000이라는 숫자를 넣어서 실행한다는 것인데요, 나중에 자주 바뀔 만한 숫자를 이렇게 표현합니다. 나중에 프로그램 수정할 때 용이하기 때문에 대부분의 프로그램에서 자주 사용하는 방법입니다.

전체적으로 지금 단계에서는 프로그램이 이렇게 구성이 되어서 이런 형태로 돌아가는구나~ 하는 것을 이해하는 것이 중요합니다. 각 줄의 명령어는 다른 식으로 바꿀 수 있는 여지는 많습니다.

아두이노에 이 프로그램을 올려서 버튼을 누르면 LED가 꺼지고, 시간이 지나서 다시 켜져서 대기 상태가 되는지 확인해 보십시요. 그것이 안 되면 미디 신호를 보내는 프로그램을 짜더라도 어디서 에러가 나는지 확인 조차 할 수 없으니까요.

여러분들의 코드도 동영상 처럼 동작하시는지요?

--

--