흥미진진한 LED 놀이~!(Knight rider LED)
흥미진진한 LED 놀이라고 제목을 붙여봤다. 단순하게 Scrolling 이나 bouncing까지 해 봤다.
아두이노를 하는 분 중에, udo klein이라는 분이 있다. 이 분 LED 20개 가지고 정말로 여러가지를 한다. 이 분이 올려논 자료를 토대로 한번 구성해 볼까 한다. 정말 대단한 사람이다. LED 가지고 이렇게 많은 것을 할 수 있다니.
옛날 초등학교 때(우리때는 국민학교 였다.) 전격Z작전이라는 외화가 있었다. 너무너무 좋아하던 드라마 였다. 키트~ 하면서 지금은 현실속에서 가능한 차 이지만, 그 당시만 하더라도 도저히 상상이 안되는 인공지능을 탑재한 슈퍼카 였다. 이 키트라는 차(knight rider)는 항상 숨을 쉬는 것처럼 차의 앞부분이 LED가 계속 움직이는 형태였다.
화면 클릭
보이는 가? 그 때는 이 차가 엄청 멋있었다. 지금봐도 괜찮지만. 저 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의 코드이다. 아두이노에 업로드해 보면, 바로 볼 수 있다.
언제나 그렇듯 화면 클릭~!
어떤가? 똑같다. 훌륭하다.
코드는 그리 어렵지 않다. 하나씩 분석해 보면 재미있다.