brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Oct 15. 2020

45.열번째 장난감:춤추는 피에로(네오픽셀)#2

IRRemote 코드 분석 및 네오픽셀 움직임 만들기

이전 이야기의 마지막 부분에 다루었던 코드를 가지고 와서 이야기를 이어나가 보자.

void loop() {

  if (irrecv.decode(&results)) {

    value = results.value;

    switch(value){      

        case 0xFF6897: // 0

          servo.write(90);

          delay(1000);

          servo.write(0);

          break;

        case 0xFF30CF: // 1

          break;

        case 0xFF18E7: // 2

          break;

        case 0xFF7A85: // 3

          break;

        case 0xFF10EF: // 4

          break;

        case 0xFF38C7: // 5

          break;

        case 0xFF5AA5: // 6

          break;

        case 0xFF42BD: // 7

          break;

        case 0xFF4AB5: // 8

          break;

        case 0xFF52AD: // 9

          break; 

   

    Serial.println(value, HEX);

    irrecv.resume(); // Receive the next value

    delay(200); 

}


loop 내부에서 처리하려고 하는 것은 버튼 0부터 9번까지의 result.value에 따라 작동하는 여러 가지 네오픽셀의 움직임이다.


각 버튼이 가지고 있는 고유 value는 위의 코드에서 보는 바와 같이 

0=0xFF6897

1=0xFF30CF

2=0xFF18E7

와 같다. 나머지 value 역시 위의 코들 참조하면 된다.

위의 코드는 0번 버튼을 눌렀을 경우 서보모터를 0도에서 90도로 회전하여, 위에 있는 피에로를 춤추게 하고 1초를 기다린 후 다시 0도로 회전하여 인형의 팔다리를 제자리로 돌려놓는 것이다.

여기에 네오픽셀의 동작을 추가하려면 일단 setup 및 전처리 코드를 아래와 같이 추가하여야 한다.

앞 이야기에서 정리했던 코드에 네오픽셀 관련 내용만 추가한 것이다. 만일 네오픽셀에 대해 생소하다면 이전에 네오픽셀에 대해 정리한 내용을 참조하시길...


이제 네오픽셀을 사용할 준비가 되어 있다.

일단 전체 LED 등을 특정한 색으로 켜는 함수를 적어보자. 

이 내용은 네오픽셀의 예제 프로그램에 포함된 내용이지만 설명을 위하여 하나씩 발췌하여 설명한다.

void colorWipe(uint32_t color, int wait) {

  for(int i=0; i<strip.numPixels(); i++) { // 우리가 가진 16개 불 모두를 돌아가며...

    strip.setPixelColor(i, color);              //  i 위치의 불을 켠다

    strip.show();                                         //  위의 내용을 실행에 옮긴다.

    delay(wait);                                          // LED 하나 당 wait 만큼 기다린다.

  }

}

이 함수를 이용하여 0번 버튼을 눌렀을 때 노란색, 1번 버튼을 눌렸을 때 청록색,  2번 버튼을 눌렀을 때 보라색 불여 켜지도록 코드를 만들어 보면 아래와 같이 만들 수 있다. (RGB를 섞은 색의 이름은 정확할 수 없다 ^^;;)

위에 정리한 loop함수의 switch  문 안에 이 코드를 집어넣으면 된다.

이렇게 했을 경우 실행되는 화면은 다음 동영상과 같다.

네오픽셀로는 빛으로 만들 수 있는 다양한 효과를 구현할 수 있다.

이러한 내용을 좀 더 공부하려면 네오픽셀과 함께 제공되는 예제를 사용해 보면 되는데, 이러한 예제는 네오픽셀 라이브러리가 설치된 개발환경의 메뉴에서 아래와 같이 찾을 수 있다.

이 예제들 중 buttoncycle 이라는 예제는 6번 핀에 네오픽셀을 연결하고, 2번 핀에 INPUT_PULLUP으로 스위치 버튼을 연결하여, 이를 누를 때마다 다양한 네오픽셀 효과를 보여준다.

해당 예제의 일부 함수를 가지고 와서 아래의 영상과 같이 리모컨의 숫자 상단 버튼을 눌러 실행을 시킨 모습인데, 해당 예제의 함수 중 theaterChase 와 rainbow를 이용한 부분이니 예제를 열어 확인해 보기 바란다.


차후에 네오픽셀과 무선 조종을 이용한 다양한 장난감 및 IOT 구현 때 여러 예제들에 대해 좀 더 자세히 분석해 보자.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari