아두이노, 1열 7세그먼트(공통캐소드 타입) 출력
글. 수알치 오상문
FND라고도 부르는 7 세그먼트(segment) 모듈은 간단한 숫자 등을 출력하기 위한 장치입니다.
[참고] FND
FND는 Flexible Numeric Display(가변 숫자 표시기)의 약어입니다.
7세그먼트는 7개의 표시줄을 가지고 있어서 그렇게 부릅니다.
7개 표시부 1세트가 있으면 1열이라고 부릅니다.
7세그먼트 모듈은 몇개 열로 이루어지냐에 따라서 1열, 2열, 3열, 4열 또는 그 이상의 모듈이 가능합니다.
하나의 7세그먼트를 이용하면 0~9, A~F 등을 출력할 수 있습니다.
참고로, 우측 아래에 점(Dot)은 있는 형태도 있고 없을 수도 있습니다.
[주의] 애노드 vs 캐소드
세그먼트 모듈은 입력 신호를 받는 형태가 크게 두 종류입니다.
흔히 커먼 애노드, 커먼 캐소드라 부르는데, 그 구분은 다음과 같습니다.
Commom-Anode(+) 종류: 공통이 5V 전원이고 0V 입력하면 켜짐
Common-Cathod(-) 종류: 공통이 GND이고 5V 입력하면 켜짐
즉, 아래 그림처럼 핀 배치가 이루어집니다.
1열 7세그먼트를 아두이노와 연결할 때는 다음과 같은 핀 배치를 이용하여 연결합니다.
(상황에 따라 달라질 수도 있습니다. 바꿀 수도 있다는 말입니다.)
7세그먼트 모듈 아두이노 우노 3
A pin <---------------> D2
B pin <---------------> D3
C pin <---------------> D4
D pin <---------------> D5
E pin <---------------> D6
F pin <---------------> D7
G pin <---------------> D8
Dot pin <-------------> D9
공통 애노드 방식 연결
공통 캐소드 방식 연결
이 예제는 공통캐소드 방식 7세그먼트를 사용하며, 점을 출력하는 핀은 사용하지 않습니다.
다음은 공통캐소드형 7세그먼트를 아두이노와 연결하여 예제를 실행한 모습입니다.
7세그먼트에 0~9까지 숫자를 출력하려면 다음과 같은 배열 자료를 이용합니다.
첫줄은 0을 출력하는 자료이고, 순서대로 다음 숫자를 출력하는 자료들입니다.
byte to7seg[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
};
[주의] 만약 애노드 방식이면 1과 0을 반대로 입력해야 합니다.
다음 예제는 0~9까지 반복해서 출력하는 소스 코드입니다.
/* 7segment output 예제 */
byte to7seg[10][7] = { // 캐소드 방식임... 애노드는 1/0 반대로 입력
{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()
{
for (byte pinNum = 2; pinNum < 9; pinNum++)
pinMode(pinNum, OUTPUT); // 7세그먼트 연결 핀을 출력용으로 설정
}
void clearSegment() { // 7세그먼트 출력 중지
for (byte i = 0; i < 7; i++)
digitalWrite(i+2, 0); // 애노드는 0대신 1을 지정
}
void writeSegment(byte digit) // 지정한 숫자를 7세그먼트에 출력
{
// clearSegment();
for (byte i = 0; i < 7; i++)
digitalWrite(i+2, to7seg[digit][i]);
}
void loop()
{
delay(1000);
for (byte n = 0; n < 10; n++) {
writeSegment(n); // 0~9까지 숫자를 번갈아 출력
delay(1000);
}
}
<이상>
'아두이노, 라즈베리파이' 카테고리의 다른 글
아두이노, 빛 감지 조도센서(CdS센서) 예제 (0) | 2018.07.04 |
---|---|
아두이노, 전기 전자 부품 살펴보기 (0) | 2018.07.01 |
아두이노, 부저 소리 크기 제어하기 (저항 사용하기) (0) | 2018.06.29 |
아두이노, 능동 부저 vs, 수동 부저 (도레미파솔라시도) (0) | 2018.06.29 |
아두이노. NTC 온도 센서로 만든 온도계 (0) | 2018.06.28 |