LED 2개로 0~3까지 표시하기
숫자 | LED2 | LED1 |
0 | OFF | OFF |
1 | OFF | ON |
2 | ON | OFF |
3 | ON | ON |
LED 2개는 총 4가지 경우를 표시할 수 있습니다. 각각의 경우가 숫자에 대응한다고 생각하면 0~3까지 숫자를 표시할 수 있습니다.
int LED1 = 2; // 첫 번째 LED 핀
int LED2 = 3; // 두 번째 LED 핀
void setup() {
pinMode(LED1, OUTPUT); // LED1 핀을 출력으로 설정
pinMode(LED2, OUTPUT); // LED2 핀을 출력으로 설정
}
void loop() {
// 0
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
delay(1000);
// 1
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay(1000);
// 2
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(1000);
// 3
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
delay(1000);
}
위 코드에서, int LED1 = 2;와 int LED2 = 3;는 각각 첫 번째 LED와 두 번째 LED가 연결된 핀 번호를 나타냅니다. void setup() 함수에서 pinMode() 함수를 이용하여 LED 핀을 출력으로 설정해줍니다. void loop() 함수에서는 각 2진수 값에 따라 LED를 켜고 끄는 동작을 반복적으로 수행합니다. digitalWrite() 함수를 이용하여 LED를 켜거나 끕니다. 각 LED를 켜는 시간은 delay() 함수를 이용하여 1초로 설정했습니다.
이것을 for문을 이용한 코드입니다.
int LED1 = 2; // 첫 번째 LED 핀
int LED2 = 3; // 두 번째 LED 핀
void setup() {
pinMode(LED1, OUTPUT); // LED1 핀을 출력으로 설정
pinMode(LED2, OUTPUT); // LED2 핀을 출력으로 설정
}
void loop() {
for(int i = 0; i < 4; i++) {
digitalWrite(LED1, i & 0x1); // 첫 번째 비트를 LED1에 출력
digitalWrite(LED2, (i >> 1) & 0x1); // 두 번째 비트를 LED2에 출력
delay(1000);
}
}
위 코드에서 for문을 이용하여 0부터 3까지의 값을 순차적으로 출력합니다. digitalWrite() 함수에서는 첫 번째 LED에는 i 값의 첫 번째 비트를, 두 번째 LED에는 i 값의 두 번째 비트를 출력합니다. 이를 위해서 &와 >> 비트 연산자를 이용합니다. 마지막으로 delay() 함수를 이용하여 1초 동안 대기합니다.
digitalWrite(LED1, i & 0x1)는 i 값의 첫 번째 비트를 LED1에 출력하는 코드입니다. 여기서 & 비트 연산자는 두 비트를 비교하여 둘 다 1일 때만 1을 출력하는 기능을 합니다. 이를 이용하여 i 값을 2진수로 표현했을 때 첫 번째 비트가 1이면 1을 출력하고, 0이면 0을 출력합니다.
digitalWrite(LED2, (i >> 1) & 0x1)는 i 값의 두 번째 비트를 LED2에 출력하는 코드입니다. 여기서 >> 비트 연산자는 오른쪽으로 비트를 이동시키는 연산을 합니다. 이를 이용하여 i 값을 2진수로 표현했을 때 두 번째 비트를 첫 번째 비트로 이동시킨 후, 첫 번째 비트와 마찬가지로 & 비트 연산자를 이용하여 출력합니다.
코드를 이해하기 어려우면 다음과 같이 두 줄의 코드를 알기 쉽게 풀어서 코딩한 것을 참고하시면 됩니다.
if(i % 2 == 1) { // i가 홀수일 때
digitalWrite(LED1, HIGH); // LED1을 켭니다.
} else { // i가 짝수일 때
digitalWrite(LED1, LOW); // LED1을 끕니다.
}
if(i >= 2) { // i가 2 이상일 때
digitalWrite(LED2, HIGH); // LED2를 켭니다.
} else { // i가 0 또는 1일 때
digitalWrite(LED2, LOW); // LED2를 끕니다.
}
