Back Ground

아두이노 - 7 세그먼트 사용하기 본문

아두이노

아두이노 - 7 세그먼트 사용하기

Back 2016. 6. 21. 14:21

1.7 세그먼트 사용하기




7세그먼트는 아노드, 캐소드 방식 두 종류로 구분됩니다. 아노드 방식은 그림 과 같이 되어 있습니다. 아노드 방식은 다음과 같이 사용합니다. 먼저 VCC에 전원을 연결합니다. 그런 다음 A~G, DP핀에 전압을 0V로 설정하면 LED가 켜지고, 5V로 설정하면 꺼집니다.




캐소드 방식은 VCC가 아닌 GND를 연결합니다. 그 다음 전압을 5V로 하면 켜지고, 0V로 하면 꺼집니다.






2. 7 세그먼트 사용하여 카운터 만들기







스케치


// 7세그먼트에 표시할 숫자를 배열로 준비해놓습니다.

// 0은 끄는 것이고, 1은 켜는 것입니다.

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() {

// 2~9번 핀들을 모두 출력 모드로 설정합니다.

for(int i=2;i<10;i++) {

pinMode(i, OUTPUT);

}

// DP, 바로 점에 해당하는 부분을 켜줍니다.

digitalWrite(9, HIGH);

}

void loop() {

// 10번 반복하는 반복문을 만듭니다.

// 0에서 9까지 반복합니다.

for(int i=0;i<10;i++) {

// 1초 멈춥니다.

delay(1000);

// 7세그먼트에 숫자를 표시합니다.

displayDigit(i);

}

}

// 숫자를 표시하기 위해 만든 함수입니다.

void displayDigit(int num) {

// 핀이 2번부터 시작하기 때문에

// 핀 번호를 맞춰주기 위해 2라는 값을 pin이란 변수를 선언했습니다.

int pin = 2;

for(int i=0;i<7;i++) {

// 앞서 준비한 배열에서 값을 불러와서

// 숫자를 7세그먼트에 표시합니다.

digitalWrite(pin+i, digits[num][i]);

}

}



함 수












3. 버튼을 누르면 1씩증가하고, 1씩감소하는 카운터 만들기



11, 12에 각각 버튼을 연결합니다. 7세그먼트는 앞에서와 동일하게 연결하면 됩니다.




스케치



// 버튼 연결 핀 번호를 매크로 상수로 지정합니다.

#define PLUS 11

#define MINUS 12

// 현재 숫자를 기록하는 변수를 선언합니다.

int digit = 0;

// 7세그먼트에 표시할 숫자를 배열로 준비해놓습니다.

// 0은 끄는 것이고, 1은 켜는 것입니다.

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;

// digit이 9를 넘었는지 확인하고 넘었으면 0으로 만듭니다.

if(digit>9) {

digit=0;

}

}

// 감소 버튼이 눌렸는지 확인합니다.

if(digitalRead(MINUS) == HIGH) {

// 눌렸다면 digit을 감소시킵니다.

--digit;

// digit이 0 밑으로 내려갔는지 확인하고 내려갔으면 9로 만듭니다.

if(digit<0) {

digit=9;

}

}

// digit을 displayDigit 함수를 이용해 7세그먼트에 표시합니다.

displayDigit(digit);

// 0.1초 멈춥니다.

delay(100);

}

// 숫자를 표시하기 위해 만든 함수입니다.

void displayDigit(int num) {

// 핀이 2번부터 시작하기 때문에

// 핀 번호를 맞춰주기 위해 2라는 값을 pin이란 변수를 선언했습니다.

int pin = 2;

for(int i=0;i<7;i++) {

// 앞서 준비한 배열에서 값을 불러와서

// 숫자를 7세그먼트에 표시합니다.

digitalWrite(pin+i, digits[num][i]);

}

}



두 버튼을 이용해 7세그먼트에 표시된 숫자를 증가시키거나 감소시킬 수 있습니다.








코드 수정


A / B / C / D/ E/ F / G / DP

10 / 9 / 8 / 5 / 4 / 2 / 3 / 7

점을 아래로 해 좌는 위부터1~5 우는 위부터 10 ~ 6입니다.

캐노스 타입

해당사항은

http://old.devicemart.co.kr/mart7/mall.php?cat=052013001&query=view&no=19631

에 나와 있습니다.

최대한 교재 소스를 이용하기위해

배열의 0과 1만 바꾸었습니다.

브레드판의 7세그먼트 발 Pin : 우노보드 디지털

1: 그라운드

2: 7

3: 8

4: 6

5: 5

10:2

9: 3

8: 4

7: 9

6: 그라운드에 꽂으면 됩니다.

소스

// 7세그먼트에 표시할 숫자를 배열로 준비해놓습니다.

// 0은 끄는 것이고, 1은 켜는 것입니다.

byte digits[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, 0, 0}, //7

{1, 1, 1, 1, 1, 1, 1}, //8

{1, 1, 1, 1, 0, 1, 1} //9

};

void setup() {

// 2~9번 핀들을 모두 출력 모드로 설정합니다.

for(int i=2;i<10;i++) {

pinMode(i, OUTPUT);

}

// DP, 바로 점에 해당하는 부분을 켜줍니다.

digitalWrite(9, HIGH);

}

void loop() {

// 10번 반복하는 반복문을 만듭니다.

// 0에서 9까지 반복합니다.

for(int i=0;i<10;i++) {

// 1초 멈춥니다.

delay(1000);

// 7세그먼트에 숫자를 표시합니다.

displayDigit(i);

}

}

// 숫자를 표시하기 위해 만든 함수입니다.

void displayDigit(int num) {

// 핀이 2번부터 시작하기 때문에

// 핀 번호를 맞춰주기 위해 2라는 값을 pin이란 변수를 선언했습니다.

int pin = 2;

for(int i=0;i<7;i++) {

// 앞서 준비한 배열에서 값을 불러와서

// 숫자를 7세그먼트에 표시합니다.

digitalWrite(pin+i, digits[num][i]);

}

}





-------------7세그먼트 소스 와 설명



A  / B / C / D/  E/  F / G / DP
10 / 9 / 8 / 5 / 4 / 2 / 3 / 7

점을 아래로 해  좌는 위부터1~5 우는 위부터 10 ~ 6입니다.

캐노스 타입

해당사항은
http://old.devicemart.co.kr/mart7/mall.php?cat=052013001&query=view&no=19631
에 나와 있습니다.

최대한 교재 소스를 이용하기위해
배열의 0과 1만 바꾸었습니다.

브레드판의 7세그먼트 발 Pin : 우노보드 디지털
1: 그라운드
2: 7
3: 8
4: 6
5: 5

10:2
9: 3
8: 4
7: 9
6: 그라운드에 꽂으면 됩니다.


소스

// 7세그먼트에 표시할 숫자를 배열로 준비해놓습니다.
// 0은 끄는 것이고, 1은 켜는 것입니다.
byte digits[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, 0, 0}, //7
  {1, 1, 1,  1, 1, 1, 1}, //8
  {1, 1, 1, 1, 0, 1, 1}  //9
};

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


void loop() {
// 10번 반복하는 반복문을 만듭니다.
// 0에서 9까지 반복합니다.
for(int i=0;i<10;i++) {
// 1초 멈춥니다.
delay(1000);
// 7세그먼트에 숫자를 표시합니다.
displayDigit(i);
}
}
// 숫자를 표시하기 위해 만든 함수입니다.
void displayDigit(int num) {
// 핀이 2번부터 시작하기 때문에
// 핀 번호를 맞춰주기 위해 2라는 값을 pin이란 변수를 선언했습니다.
int pin = 2;
for(int i=0;i<7;i++) {
// 앞서 준비한 배열에서 값을 불러와서
// 숫자를 7세그먼트에 표시합니다.
digitalWrite(pin+i, digits[num][i]);
}
}















참고 : Arduino 7 Segment 4 Digit LED


http://www.instructables.com/id/Arduino-4-digit-7-segment-display/

http://www.electroschematics.com/10512/arduino-4-digit-7-segment-led-display/

http://www.learningaboutelectronics.com/Articles/4-digit-7-segment-LED-circuit-with-an-arduino.php








Comments