보드/아두이노기본코드

LED 4개로 0~15 표시

e코딩넷 블로그 2023. 5. 12. 15:16

LED 4개가 표시하는 16가지의 경우는 다음과 같습니다.

 

숫자 LED4 LED3 LED2 LED1 숫자 LED4 LED3 LED2 LED1
0 OFF OFF OFF OFF 8 ON OFF OFF OFF
1 OFF OFF OFF ON 9 ON OFF OFF ON
2 OFF OFF ON OFF 10 ON OFF ON OFF
3 OFF OFF ON ON 11 ON OFF ON ON
4 OFF ON OFF OFF 12 ON ON OFF OFF
5 OFF ON OFF ON 13 ON ON OFF ON
6 OFF ON ON OFF 14 ON ON ON OFF
7 OFF ON ON ON 15 ON ON ON ON

 

// 각 자리에 해당하는 디지털 핀 번호
const int LED_pins[3] = {2, 3, 4, 5};

void setup() {
  // 디지털 핀을 출력으로 설정
  for(int i=0; i<4; i++){
    pinMode(LED_pins[i], OUTPUT);
  }
}

void loop() {
  // 0부터 15까지의 16진수를 차례대로 표시
  for(int num=0; num<16; num++){
    // 각 자리의 LED 상태를 결정
    for(int i=0; i<4; i++){
      int state = (num >> i) & 0x1; // i번째 비트 추출
      digitalWrite(LED_pins[i], state);
    }
    delay(1000); // 1초 대기
  }
}

각 자리에 해당하는 디지털 핀 번호를 배열에 저장하여 반복문을 이용한 코드입니다. 0부터 15까지의 16진수를 차례대로 표시하기 위해 반복문을 사용하였습니다. 각 자리의 LED 상태를 결정하기 위해 이진수로 변환하여 비트 연산을 이용하였습니다.

 

4개의 LED 중 첫 번째 LED부터 마지막 LED까지 16진수 값을 표시하기 위해서, 16진수 값인 i를 2진수 값으로 변환하여 각 비트를 LED에 출력하는 방식으로 동작합니다.

이때, digitalWrite() 함수를 이용하여 LED의 상태를 변경합니다. digitalWrite() 함수는 첫 번째 매개변수로 LED 핀 번호를 입력하고, 두 번째 매개변수로 HIGH 또는 LOW 값을 입력하여 LED를 켜거나 끌 수 있습니다.

위의 코드에서는 첫 번째 LED부터 차례로 16진수 값을 표시하며, i & 0x1과 같은 비트 연산자를 이용하여 i의 각 비트가 1인지 0인지를 판별하여 LED를 켜거나 끄는 것을 반복합니다. 이렇게 하여 0부터 15까지의 16진수 값을 표시할 수 있습니다.

 

C언어 비트연산 참고하기

 

위의 브레드보드에서는 LED 4개의 - 핀 갯수가 총 4개여서 아두이노의 GND 갯수인 3개에 하나씩 꼽기가 어렵습니다. 이럴때는 4개의 -핀을 브레드보드의 공통 GND(파란선으로 연결된 곳)에 꼽은후 아두이노의 GND에 선으로 연결해주면 됩니다.