Arduino 7-segment 카운트

  1. 개요
    1. 7-segment란?
  2. 회로도
  3. 소스코드
  4. 시연 영상

개요


7-segment란?

  • 7세그먼트(7 Segment)는 7개의 획으로 숫자나 문자를 나타낼 수 있는 표시장치를 의미한다.
  • 이러한 7세그먼트(7 Segment)는 동작방식에 따라 공통 양극(Common-Anode)형 공통 음극(Common-Cathod)형으로 나뉜다.
    • Common-Anode는 LED의 양극(+극)끼리 묶어 VCC(+5V)에 연결해주고 음극(-극)에 GND에 연결하여 불이 들어오게 한다.
    • Common-Cathode는 LED의 음극(-극)끼리 묶어 GND에 연결하고 양극(+극)에 VCC를 연결해 불이 들어오게 한다.

회로도


 

  • 나의 경우에는 버튼을 눌러 카운트를 하는 것이 목적이기 때문에 그림과 같이 회로를 구성했다.
  • 왼쪽 버튼을 누르면 숫자가 증가하고, 오른쪽 버튼을 누르면 숫자가 감소하게 된다.

소스코드


#define PLUS 11  // 버튼 연결 핀 
#define MINUS 12

// 현재 숫자를 기록하는 변수를 선언합니다.
int digit = 0;

// 0은 led를 끄고, 1은 led를 킨다.
byte digits[10][7] =
{
{ 0,0,0,0,0,0,1 }, // 0
{ 1,0,0,1,1,1,1 }, // 1
{ 0,0,1,0,0,1,0 }, // 2
{ 0,0,0,0,1,1,0 }, // 3
{ 1,0,0,1,1,0,0 }, // 4
{ 0,1,0,0,1,0,0 }, // 5
{ 0,1,0,0,0,0,0 }, // 6
{ 0,0,0,1,1,1,1 }, // 7
{ 0,0,0,0,0,0,0 }, // 8
{ 0,0,0,1,1,0,0 }  // 9
};

void setup() {
    // 버튼 핀들을 입력 모드로 설정합니다.
    pinMode(PLUS, INPUT);
    pinMode(MINUS, INPUT);

    // 2~9번 핀들을 모두 출력 모드로 설정합니다.
    for(int i=2;i<10;i++) {
        pinMode(i, OUTPUT);
    }
    // DP, 점에 해당하는 부분을 켜줍니다.
    digitalWrite(9, HIGH);
}

void loop() {
    if(digitalRead(PLUS) == HIGH) {
        //눌렸다면 digit을 증가시킵니다.
        ++digit;
        if(digit>9) {
            // digit이 9를 넘었는지 확인하고 넘었으면 0으로 만듭니다.
            digit=0;
        }
    }
    if(digitalRead(MINUS) == HIGH) {
        // 눌렸다면 digit을 감소시킵니다.
        --digit;
        if(digit<0) {
            // digit이 0 밑으로 내려갔는지 확인하고 내려갔으면 9로 만듭니다.
            digit=9;
        }
    }
    // digit을 displayDigit 함수를 이용해 7세그먼트에 표시합니다.
    displayDigit(digit);

    // 0.1초 멈춥니다.
    delay(1000);
}


// 숫자를 표시하기 위해 만든 함수입니다.
void displayDigit(int num) {
    // 핀 번호를 맞춰주기 위해 2라는 값을 pin이란 변수를 선언했습니다.
    int pin = 2;
    for(int i=0;i<7;i++) {
        // 앞서 준비한 배열에서 값을 불러와서
        // 숫자를 7세그먼트에 표시합니다.
        digitalWrite(pin+i, digits[num][i]);
    }
}

시연 영상