Making MIDI Controller #3

구종회 (JongHoe Koo)
Making MIDI Controller
5 min readMay 21, 2015

이제 코드를 쓰기 시작할 때입니다. 우리가 만드는 미디 컨트롤러는 소형 컴퓨터라고 할 수 있습니다. 컴퓨터긴 한데 정해진 몇가지 동작만 하도록 만들어진 컴퓨터라고 할 수 있지요. 즉, 버튼을 누르면 정해진 미디 신호가 출력되는 컴퓨터입니다. 컴퓨터라는 말을 굳이 쓴 이유는 이 컴퓨터를 가지고 다른 동작을 프로그래밍하면 다른 일도 할 수있기 때문입니다. 훌륭한 기능을 가진 컴퓨터를 가지고 딱 한 가지 일만 시키는 것입니다. 오로지 집중해서 한 가지 일만 하도록 하는 것이지요. 나는 한 놈만 팬다! 그런 단순한 집중력을 가진 녀석이 될 겁니다.

마이크로 프로세서를 장착한 소형 컴퓨터를 임베디드 시스템이라고도 합니다. 윈도우 7 혹은 OS-X 같은 OS를 포함 하기도 하고 혹은 정해진 동작만 수행하도록 프로그래밍 되기도 합니다. 어느쪽이든 중요한 것은 이른 종류의 OS 혹은 프로그램은 시작만 있고 끝이 없다는 것입니다. 전원이 들어가고, 프로그램이 시작되면 끊임 없이 주어진 업무를 수행할 뿐 프로그램의 끝 지점을 만날 수 없습니다. 계속 명령을 기다리고, 명령이 주어지면 수행하고, 또 명령을 기다리는 것을 반복할 뿐입니다. 심지어 이제 그만 종료하고 시스템을 끄라고 하는 명령도 단지 순서에 따라 실행할 뿐입니다. 그래서 자신이 꺼지는지도 모른채 정해진 명령을 수행하는거죠. 전원이 꺼지기 전까지는 스스로 꺼지는 것도 모른채 명령을 ‘계속’ 수행합니다. 단순하다고 해야 할지 충성스럽다라고 해야 할지.

프로그램을 만드는 입장에서도 같은 생각을 해야 합니다. 전원이 주어진 상황에서 시작해 영원히 끝나지 않는 프로그램을 작성해야 합니다. 임베디드 혹은 마이크로프로세서를 사용하는 장치의 프로그램이 다른 종류의 프로그램과 다른 점이기도 합니다. 전원이 들어와서 프로그램이 시작되면 준비 해야 할 과정이 있고, 그 과정이 끝나면 전원이 꺼지기 전까지 반복해야 하는 일들이 있습니다. 그래야 영원히 계속될 프로그램이 될 테니까요.

아두이노에서 작성하는 프로그램 실습

MIDI Controller 프로그램의 전체 그림, 아직 미완성인 이 상태에서 구체적인 부분을 작성해 나간다.

그림으로 보는 프로그램 코드는 다소 복잡해 보입니다만, 차근 차근 보다보면 별 것 아니라고 느끼게 될 겁니다. ^^; (대강의 형태만 구현된 것이고 아직 동작하는 코드는 아닙니다)

Arduino 프로그래밍은 Setup()-Loop() 함수로 구성됩니다. 코드의 7번줄, 11번 줄에 setup()과 loop()의 모습이 보이지요. “setup()”을 setup 함수라고 읽습니다. 마찬가지로 “loop()”는 loop 함수라고 읽지요.

setup 함수의 내용은 { } 기호 사이에 들어있습니다. 아직은 코드를 작성하지 않아서 비어있습니다. 나중에 참고 하려고 설명글만 한줄 써 놓았지요. 위 코드에서는 8번 줄에 있는 내용입니다.

setup 함수는 아두이노 프로그램에서 시스템이 켜졌을 때 처음 실행하는 함수 입니다. 전원이 들어오면 setup 함수에 있는 내용들이 순서대로 실행되지요. 그리고 setup 함수는 끝납니다. 그 다음에는 loop 함수로 넘어갑니다.

loop 함수는 { } 안에 있는 내용들을 순서대로 실행합니다. 끝까지 가고 나면 다시 loop 함수의 처음부터 순서대로 실행합니다. 영원히, 전원이 꺼질 때 까지 반복됩니다. 무식하고 성실하게 묵묵하게 한번에 하나씩 꾸준하게 반복합니다.

setup() 함수에 들어갈 내용

회로도에 있는 내용과 일치하도록 하드웨어 상태를 아두이노에게 알려주는 역할을 합니다. 어느 핀을 입력으로 쓰겠다, 어느 핀에 LED가 연결되어 있다, 어느 핀을 통해서 신호를 출력한다. 그런 내용들을 정의하는 것입니다. 아두이노 입장에서는 어느 핀을 입력으로, 또 어느 핀을 출력으로, 출력은 아날로그인지 디지털인지 그런 것을 약속하는 단계라고 할 수 있습니다.

loop() 함수에 들어갈 내용

loop() 함수에는 계속 반복될 내용을 기록합니다.

우리가 만들 MIDI Controller는 MIDI 신호를 출력하는 것이 핵심 내용이죠. 스위치가 눌려지면 MIDI 신호를 출력하라! 하는 것입니다. 코드의 12~15번 줄에 들어 있는 내용들입니다.

14번 줄에 있는 delay 함수는 오렌지 색깔입니다. 따로 설명하지 않아도 아두이노가 알아 들을 수 있는 함수라는 뜻입니다. 13번 줄에 있는 sendQLabGo 함수는 색깔이 그냥 까만 글자색입니다. 아두이노가 모르는 함수라는 뜻입니다. 아두이노가 모르는 함수는 직접 작성해야 합니다. 12번 줄에 있는 switched 함수도 마찬가지지요. 또 12번 줄에 있는 if 함수도 그렇습니다. if 함수는 색깔이 다르지요. 아두이노가 알고 있는 함수라고 생각합시다. 따로 설명할 필요 없이 사용 가능하다고.

각각의 함수에 대해선 다음 기회로 미루고, 오늘은 setup과 loop 함수의 역할에 대해 이해하는 것 까지만 하기로 하지요. 다음 에는 좀 더 속도를 내서 다음 글 까지의 간격이 길지 않도록 하겠습니다. ^^

--

--