흥미진진한 LED 놀이라고 제목을 붙여봤다. 단순하게 Scrolling 이나 bouncing까지 해 봤다.

아두이노를 하는 분 중에, udo klein이라는 분이 있다. 이 분 LED 20개 가지고 정말로 여러가지를 한다. 이 분이 올려논 자료를 토대로 한번 구성해 볼까 한다. 정말 대단한 사람이다. LED 가지고 이렇게 많은 것을 할 수 있다니.

옛날 초등학교 때(우리때는 국민학교 였다.) 전격Z작전이라는 외화가 있었다. 너무너무 좋아하던 드라마 였다. 키트~ 하면서 지금은 현실속에서 가능한 차 이지만, 그 당시만 하더라도 도저히 상상이 안되는 인공지능을 탑재한 슈퍼카 였다. 이 키트라는 차(knight rider)는 항상 숨을 쉬는 것처럼 차의 앞부분이 LED가 계속 움직이는 형태였다.

Video Label

화면 클릭

보이는 가? 그 때는 이 차가 엄청 멋있었다. 지금봐도 괜찮지만. 저 LED를 구현해 볼까 한다.

void setup() {
    for (uint8_t pin=0; pin<20; ++pin) {
        pinMode(pin, OUTPUT);
    }
}

uint8_t brightness(const int8_t led, const int8_t pos) {    
    switch (abs(led-pos)) {
        case 0:     return 128;
        case 1:     return 64;
        case 2:     return 32;
        case 3:     return 16;
        case 4:     return 6;
        case 5:     return 2;
        default:    return 1;
    }
}

void pulse_width_modulation(const uint8_t pos) {
    for(uint8_t times=0; times<3; ++times) {
        for (uint8_t pass=0; pass<128; ++pass) {
            for (int8_t led=0; led<20; ++led) {
                digitalWrite(led, (brightness(led, pos) > pass));
            }
        }
    }
}

void loop() {
    static uint8_t pos=0;

    while(pos<20) {
        pulse_width_modulation(pos);
        ++pos;
    }

    while(pos>0) {
        --pos;
        pulse_width_modulation(pos);
    }
}

이 코드가 바로 knight rider의 코드이다. 아두이노에 업로드해 보면, 바로 볼 수 있다.

Video Label

언제나 그렇듯 화면 클릭~!

어떤가? 똑같다. 훌륭하다.

코드는 그리 어렵지 않다. 하나씩 분석해 보면 재미있다.