이전 포스트에선 LED를 연결할 때 왜 저항이 필요한지 그리고 저항은 어떤 것을 선택해야 하는지에 대해 알아보았다.
이번에는 LED와 저항을 이용해서 좀 더 많은 LED를 동작시켜보자.

LED는 그림과 같이 3개를 연결했고, 각 LED는 저항을 거쳐 아두이노 보드의 2, 3, 4번에 연결되어 있다.
물론 다른 번호에 연결해도 상관없다.
다만, 0번과 1번은 제외하고 연결하자.
연결을 했다면 LED를 동작시켜보자.
첫번째로 할 동작은 LED 3개가 동시에 깜박이는 코드다.
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(1000);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(1000);
}pinMode와 digitalWrite는 이전 포스트에서 했던 내용인데 각각 데이터 핀을 설정하는 함수와 데이터 핀으로 전압을 출력하는 함수다.
만약 기억나지 않는다면 이전 포스트를 다시 한 번 보고 오자.
( https://polnalab.com/arduino/basic/384/ )
자, 그럼 코드를 전체적으로 한 번 살펴보자.
앞서 이 코드는 3개의 LED가 동시에 깜박이는 코드라고 했다.
하지만 코드를 보면 LED가 동시에 동작하는 것 같이 느껴지지 않는다.
그 이유를 보자면 이전 포스트에서 했던 말인데 아두이노 코딩은 위에서 밑으로 순서대로 동작한다고 했었다.
그래서 1번부터 5번 줄까지 setup 동작을 하고 다음 7번부터 16번 줄까지 loop가 동작을 한다.
16번 줄의 동작이 끝나면 다시 loop의 처음으로 돌아가서 반복 동작을 하는 것이 우리가 아는 아두이노의 기본 동작일 것이다.
이 말대로라면 digitalWrite 함수가 순서대로 2번으로 5V 출력, 3번으로 5V 출력, 4번으로 5V 출력 이렇게 동작을 하게 되는데 어떻게 LED가 동시에 켜지냐는 것이다.
사실대로 말하자면 이 말이 맞다.
동시에 동작하지 않는다.
단, 순서대로 동작을 하긴 하는데 그 동작이 너무 빨라 우리 눈에는 동시에 동작하는 것처럼 보이는 것이다.
간단히 말하면 착시현상이라고도 할 수 있을 것이다.
우리가 사용하는 아두이노 우노 보드에는 클럭(Clock)이라고 하는 동작의 기준이 되는 일정한 박자가 존재한다.
그 클럭이 16MHz로 표시되어 있는데, 이것은 우노 보드의 마이크로컨트롤러가 1초에 약 1,600만 번의 박자에 맞춰서 동작한다는 의미다.
(M은 Mega를 나타내고 Mega는 10의 6승을 의미한다.)
물론 명령 하나를 처리하는데 정확히 하나의 박자만 사용되는 것은 아니고 명령에 따라 여러 번의 박자가 사용된다.
그래서 지금은 우리가 코드를 작성하게 되면 저 정도로 빠르게 동작을 하는 구나 정도로 생각하면 되겠다.
참고로 우리가 사용하는 PC의 CPU도 이러한 클럭이 존재하는데 보통 클럭은 2.4GHz 이런식으로 GHz 대역이다.
이것을 위에서 설명한 박자로 표현하자면 1초에 24억 번의 박자를 기준으로 동작하고 있다고 볼 수 있다.
이것만 봐도 우리가 사용하는 마이크로컨트롤러와 CPU의 차이를 알 수 있을 것이다.
다시 본론으로 돌아와서 코드와 코드 사이는 아주 빠르게 동작하기 때문에 코드 1과 같이 digitalWrite를 연속으로 작성 하게 되면 각각 따로 동작하지만 우리가 볼 땐 동시에 동작하는 것처럼 보인다는 것이다.

그렇다면 순차적으로 동작하고 있다는 것은 어떻게 알아 볼 수 있을까.
당연히 우리 눈에 보일만큼 시간 지연을 시키면 되니 코드와 코드 사이에 delay를 넣게 되면 동작이 순서대로 되는 것을 알 수 있다.
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(3, HIGH);
delay(1000);
digitalWrite(4, HIGH);
delay(1000);
digitalWrite(4, LOW);
delay(1000);
digitalWrite(3, LOW);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}위의 코드를 작성해서 업로드 해보면 2번에 연결된 LED가 켜지고 1초 뒤에 3번 또 1초 뒤에 4번에 연결된 LED가 켜지는 것을 볼 수 있다.
꺼지는 것도 마찬가지로 4번부터 2번까지 순서대로 꺼지게 된다.

이런 것처럼 코드는 순차적으로 동작하고 있고 이것을 이용하면 코드 2처럼 LED의 패턴을 만들 수 있다.
지금은 3개의 LED지만 LED를 몇 십개 몇 백개 연결해서 동작을 하게 되면 크리스마스 트리의 장식처럼 다양한 LED 동작을 만들 수 있는 것이다.
그리고 코드 1과 코드 2를 이해하면 다음과 같은 패턴도 만들 수 있다.
이것은 한 번 직접 만들어보자.

