본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #5.세그먼트 제어하기

728x90
반응형

7 세그먼트 제어

7 세그먼트에는 두 종류가 있다. 각각 공통 음극 7 세그먼트와 공통 양극 7 세그먼트라고 한다.

세그먼트 종류(좌: 공통 양극/우: 공통 음극)

공통 음극 세그먼트 모든 LED의 음극을 GND에 연결한다.
각각의 LED는 양극을 VCC에 연결해 키거나 끈다.

일반적으로 사용하는 세그먼트이다.
공통 양극 세그먼트 모든 LED의 양극을 VCC에 연결한다.
각각의 LED는 음극을 GND에 연결해 키거나 끈다.

세그먼트 핀 배열

세그먼트 회로 구성하기

공통 음극 세그먼트, 공통 양극 세그먼트 모두 LED와 전원을 연결 시 저항을 연결하는 것을 잊지말자!

세그먼트 기본 회로도: LED 1개

7 세그먼트 제어 회로도

7 세그먼트 회로도

  • 7 세그먼트가 켜지는 순서는 a~f로 7개의 LED를 바탕으로 0부터 9를 표현할 수 있다.
const int N[10][7] = {
  {1,1,1,1,1,1,0}, //0
  {0,1,1,0,0,0,0}, //1
  {1,1,0,1,1,0,1}, //2
  {1,1,1,1,0,0,1}, //3
  {0,1,1,0,0,1,1}, //4
  {1,0,1,1,0,1,1}, //5
  {1,0,1,1,1,1,1}, //6
  {1,1,1,0,0,1,0}, //7
  {1,1,1,1,1,1,1}, //8
  {1,1,1,1,0,1,1}  //9
};

세그먼트 제어 코드

const int seg[7] = {2,3,4,5,6,7,8};

const int N[10][7] = {
  {1,1,1,1,1,1,0},
  {0,1,1,0,0,0,0},
  {1,1,0,1,1,0,1},
  {1,1,1,1,0,0,1},
  {0,1,1,0,0,1,1},
  {1,0,1,1,0,1,1},
  {1,0,1,1,1,1,1},
  {1,1,1,0,0,1,0},
  {1,1,1,1,1,1,1},
  {1,1,1,1,0,1,1} 
};

void setup() {
  // put your setup code here, to run once:
  for(int i=0;i<7;i++){
    pinMode(seg[i],OUTPUT);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  for(int j=0;j<10;j++){
    for(int i=0;i<7;i++){
      digitalWrite(seg[i],N[j][i]==1?HIGH:LOW);
    }
    delay(1000);
    for(int i=0;i<7;i++){
      digitalWrite(seg[i],LOW);
    }
  }

}

변수 선언

const int seg[7] = {2,3,4,5,6,7,8};

const int N[10][7] = {
  {1,1,1,1,1,1,0},
  {0,1,1,0,0,0,0},
  {1,1,0,1,1,0,1},
  {1,1,1,1,0,0,1},
  {0,1,1,0,0,1,1},
  {1,0,1,1,0,1,1},
  {1,0,1,1,1,1,1},
  {1,1,1,0,0,1,0},
  {1,1,1,1,1,1,1},
  {1,1,1,1,0,1,1} 
};
  • 세그먼트를 선언하기 위한 배열을 선언한다. 각각의 LED를 2부터 8까지 핀을 할당한다.
  • 세그먼트의 값을 표시하기 위한 이중 배열을 선언한다. 숫자의 인덱스를 활용한다.

setup()

void setup() {
  // put your setup code here, to run once:
  for(int i=0;i<7;i++){
    pinMode(seg[i],OUTPUT);
  }
}

반복문을 이용하여 seg [7] 배열을 입출력 초기화한다. (LED이므로 OUTPUT으로 설정한다.)

loop()

void loop() {
  // put your main code here, to run repeatedly:
  for(int j=0;j<10;j++){
    for(int i=0;i<7;i++){
      digitalWrite(seg[i],N[j][i]==1?HIGH:LOW);
    }
    delay(1000);
    for(int i=0;i<7;i++){
      digitalWrite(seg[i],LOW);
    }
  }
}
  • 이중 반복문을 사용한다. 10번 반복하여 세그먼트 LED를 출력한다. 이때 N배열의 값에 저장된 값에 따른 LED를 출력을 하게 된다.
  • 배열 N에 저장된 배열은 각각 0~9를 표현하기 위한 이진 표현으로 0이면 불을 켜지 않고 1이면 키며, 이를 순간적으로 세그먼트의 순서에 따라 digitalWrite 하게 되면 우리 눈에는 해당 숫자가 표시된 것처럼 보인다.
  • 1초 동안 기다리며 이후 7개의 LED을 모두 LOW상태로 만든다.
728x90
반응형
댓글