아두이노로 작품/장난감을 만들다 보면 여러 가지 종류의 센서와 작동 부품을 동시에 사용해야 하는 경우가 있다.
이때 여러 개의 센서를 동시에 감지하고, 여러 개의 부품을 동시에 동작시키려면 다양한 기법이 필요하다.
왜냐하면 하나의 동작을 시행하는 코드가 마무리되기 전까지는 다른 부품의 작동을 위한 명령을 내릴 수 없기 때문이다.
이러한 문제를 해결하는 방법 중 두 가지를 소개한다. 이 내용은 일반적인 방법 또는 명칭이 아니라 내가 그냥 편의상 붙인 이름이고 방법이니 일반화하여 생각하지 않으시기 바란다.
첫 번째 방법 : 인터럽트의 사용
이 방법은 어떤 액츄에이터가 반복하여 동작하고 있을 때 버튼의 눌림이나 센서에서 받은 정보를 처리해야 하는 경우에 사용하는 방법이다. 이러한 인터럽트의 방법은 내 글 중 <36. 여덟 번째 장난감: LCD 디스플레이 게임>에서 이미 설명한 바 있다.
그런데 이러한 경우는 동작과 센싱이라는 두 가지 분리된 부품을 가지고 코딩을 하는 경우였으므로 좀 다른 경우를 생각해 볼 수 있다.
두 가지 액츄에이터를 동직 시키는 경우이다.
다음과 같은 작업을 한다고 하면, 어떻게 해야 할까?
--------------------------------------------------------
8개의 LED를 가진 네오 픽셀 링과 서보모터가 있다고 하고, 네오 픽셀의 LED가 순서대로 켜져서 모든 불이 켜질 때까지 서보모터가 동시에 회전을 하여 160도만큼 회전을 하고,
네오픽셀의 LED가 역순으로 꺼지는 동안 서보모터가 원래의 자리로 돌아온다고 하자. 그런데 이때 네오픽셀의 불이 켜지는 것과 서보모터의 회전이 보조를 맞추어 진행이 되기를 원한다고 하면 어떨까?
아래와 같이 회로를 꾸미고 코딩을 해보자.
팅커캐드에 네오픽셀 8구 원형이 없어서 부득이하게 직선 네오픽셀 8구를 연결하였다.
실제 그림에서는 원형 네오픽셀로 보여드리도록 하겠다.
기본 전원과 GND를 연결하고 서보모터는 9번 핀에 네오픽셀은 6번 핀에 연결하였다.
이 회로에 아래와 같은 코드를 실행시킬 경우 그 아래의 동영상과 같은 결과를 보여준다.
보시는 바와 같이 서보모터의 동작이 완료되기 전까지는 네오픽셀이 동작하지 않고, 네오픽셀의 켜기 또는 끄기 작업이 완료되기 전까지는 서보모터의 동작이 시작되지 않는다.
이를 상호 작용하게 하기 위하여 한 가지 액츄에이터의 동작 반복 사이사이에 다른 액츄에이터의 동작이 진행되도록 코드를 만들어야 한다.
2. 명령어의 분할 또는 반복중 끼워 넣기
for 문을 사용하여 동일 작업에 변수 일부를 변경한 반복 작업을 수행하는 경우, 이를 이용하여 코드를 분할하여 처리할 수 있다.
위의 보기처럼 for 문안에 servo 모터가 변경할 각도를 지정하고 이를 네오픽셀의 LED를 켜는 순서에 맞춰 동작하게 하면 아래의 동영상처럼 동작하게 된다.
이러한 예와 같이 하나의 액츄에이터의 동작의 크기를 다른 액츄에이터의 동작과 균형을 이루게 하는 방법을 고려하여 코딩을 하여야 한다.
앞서 만들었던 "날갯짓하는 갈매기"에 네오픽셀을 더하여 날갯짓에 따라 네오픽셀 컬러가 변하는 형태로 제작하여 아래에 그 동영상을 올렸다. 참조하시길~~~