Arduino Uno 4-Digit FND 사용 방법
4자리 7-Segment 의 구조를 알아보고, 기초적인 사용법을 설명
합니다. 본 포스트에서는 7Segment 의 구조를 안다고 가정하고 설명을 진행합니다. 7Segement 의 구조를 먼저 알고 싶으신 분은 하단의 링크를 참조해주세요.4Digit 7Segment
4자리 FND(7-Segment)는 7Segment가 4개가 있는 방식으로 기본 구조는 비슷합니다. 4자리 FND도 공통-애노드, 공통-캐소드 타입이 있지만, 이번 포스트에서는 공통 애노드 타입만 설명하도록 하겠습니다. 공통 캐소드 타입은 동작이 반대로 된다고 이해하시면 됩니다.
아래 그림은 Common-Anode 타입의 4자리 FND의 외형과 내부 회로도를 나타낸 그림입니다. 이 부품은 총 12개의 핀을 가지고 있으며, 7개의 문자 SEGMENT 핀, 1개의 DP핀, 4개의 DIGIT 핀으로 구성됩니다.
4Digit 7Segment
7-Segment 개가 붙어 있어서 핀이 4배가 되는 것이 아니라, 8개의 SEGMENT는 공유하고, 4개의 공통 애노드 단자만 분리하여 사용합니다.
FND 4자리에 모두 데이터를 표시하기 위해, Digit1만 켜서 데이터를 표시 -> Digit2만 켜서 데이터를 표시 -> Digit3만 켜서 데이터를 표시 -> Digit4만 켜서 데이터를 표시하는 방법으로 숫자 또는 문자를 표시합니다.
아두이노에서 4자리 FND 사용하기
Hardware
아두이노 우노 보드에서 4-Digit 7Segment 를 사용하기 위해 아래와 같이 회로를 연결 합니다.
Arduino Uno 4자리 FND 연결 회로도 및 연결 예시
본 예제에서 사용한 4Digit 7Segment 의 모델명은 HS410561K-32 로 Common-Anode 타입의 FND입니다. 개인에 따라 핀 매핑은 편하신대로 진행하셔도 됩니다. 코드에서 수정이 가능합니다.
예제1 : 1자리씩 천천히 출력
4자리 FND의 기본 사용 방법을 이해하기 위해 1초 간격으로 한 자리씩 FND를 켜는 예제를 소개합니다. 이해를 코드를 풀어서 작성하였습니다. 회로도 연결이 다른 경우 상단의 선언문에서 수정이 가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #define segA 12 // 'a' 세그먼트 연결 핀 번호 #define segB 2 // 'b' 세그먼트 연결 핀 번호 #define segC 7 // 'c' 세그먼트 연결 핀 번호 #define segD 9 // 'd' 세그먼트 연결 핀 번호 #define segE 10 // 'e' 세그먼트 연결 핀 번호 #define segF 11 // 'f' 세그먼트 연결 핀 번호 #define segG 6 // 'g' 세그먼트 연결 핀 번호 #define segDP 8 // 'dp' 세그먼트 연결 핀 번호 #define digit1 13 // 1st digit 연결 핀번호 #define digit2 4 // 2nd digit 연결 핀번호 #define digit3 3 // 3rd digit 연결 핀번호 #define digit4 5 // 4th digit 연결 핀번호 // main 함수에서 처리 편하게 하기 위해 핀번호 배열을 생성 int fndPort[8] = {segA, segB, segC, segD, segE, segF, segG, segDP}; // index 0-9 -> 숫자 1~9 // index 10 -> Blank int fndData[11][8] = { { 0, 0, 0, 0, 0, 0, 1, 1 }, // 0 { 1, 0, 0, 1, 1, 1, 1, 1 }, // 1 { 0, 0, 1, 0, 0, 1, 0, 1 }, // 2 { 0, 0, 0, 0, 1, 1, 0, 1 }, // 3 { 1, 0, 0, 1, 1, 0, 0, 1 }, // 4 { 0, 1, 0, 0, 1, 0, 0, 1 }, // 5 { 0, 1, 0, 0, 0, 0, 0, 1 }, // 6 { 0, 0, 0, 1, 1, 0, 1, 1 }, // 7 { 0, 0, 0, 0, 0, 0, 0, 1 }, // 8 { 0, 0, 0, 0, 1, 0, 0, 1 }, // 9 { 1, 1, 1, 1, 1, 1, 1, 1 }, // 10 - blank }; void setup(){ // SEGMENT 핀 출력모드로 설정 for(int i = 0 ; i < 8 ; i++) { pinMode(fndPort[i],OUTPUT); } // 공통 Digit 핀 출력 모드로 설정 pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); // FND 모두 끄기 - 공통-애노드 타입으로 LOW 출력시 OFF digitalWrite(digit1, LOW); digitalWrite(digit2, LOW); digitalWrite(digit3, LOW); digitalWrite(digit4, LOW); } void loop(){ // 첫째 자리 FND 숫자 1출력 for(int j = 0 ; j < 8 ; j++){ digitalWrite(fndPort[j], fndData[1][j]); } digitalWrite(digit1, HIGH); delay(1000); fndOff(); //fnd 모두 끄기 // 둘째 자리 FND 숫자 2출력 for(int j = 0 ; j < 8 ; j++){ digitalWrite(fndPort[j], fndData[2][j]); } digitalWrite(digit2, HIGH); delay(1000); fndOff(); //fnd 모두 끄기 // 셋째 자리 FND 숫자 3출력 for(int j = 0 ; j < 8 ; j++){ digitalWrite(fndPort[j], fndData[3][j]); } digitalWrite(digit3, HIGH); delay(1000); fndOff(); //fnd 모두 끄기 // 넷째 자리 FND 숫자 4출력 for(int j = 0 ; j < 8 ; j++){ digitalWrite(fndPort[j], fndData[4][j]); } digitalWrite(digit4, HIGH); delay(1000); fndOff(); //fnd 모두 끄기 } void fndOff(){ // FND 모두 끄기 digitalWrite(digit1, LOW); digitalWrite(digit2, LOW); digitalWrite(digit3, LOW); digitalWrite(digit4, LOW); } | cs |
위의 코드를 실행하면 아래 영상과 같이 1초 간격으로 1자리씩 숫자가 출력 되는 것을 확인 할 수 있습니다.
예제2 : FND 4자리 모두 출력
이번 예제는 예제1에서 순환하는 스피드를 점점 올리면서, 4자리 7세그먼트가 동시에 출력되는 것처럼 보여주는 예제입니다. 예제1에서 시간 조정을 하고 코드의 줄 수를 줄이는 수정을 진행하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #define segA 12 // 'a' 세그먼트 연결 핀 번호 #define segB 2 // 'b' 세그먼트 연결 핀 번호 #define segC 7 // 'c' 세그먼트 연결 핀 번호 #define segD 9 // 'd' 세그먼트 연결 핀 번호 #define segE 10 // 'e' 세그먼트 연결 핀 번호 #define segF 11 // 'f' 세그먼트 연결 핀 번호 #define segG 6 // 'g' 세그먼트 연결 핀 번호 #define segDP 8 // 'dp' 세그먼트 연결 핀 번호 #define digit1 13 // 1st digit 연결 핀번호 #define digit2 4 // 2nd digit 연결 핀번호 #define digit3 3 // 3rd digit 연결 핀번호 #define digit4 5 // 4th digit 연결 핀번호 // main 함수에서 처리 편하게 하기 위해 핀번호 배열을 생성 int fndPort[8] = {segA, segB, segC, segD, segE, segF, segG, segDP}; int fndDigit[4] = {digit1, digit2, digit3, digit4}; int delayTime = 500; // index 0-9 -> 숫자 1~9 // index 10 -> Blank int fndData[11][8] = { { 0, 0, 0, 0, 0, 0, 1, 1 }, // 0 { 1, 0, 0, 1, 1, 1, 1, 1 }, // 1 { 0, 0, 1, 0, 0, 1, 0, 1 }, // 2 { 0, 0, 0, 0, 1, 1, 0, 1 }, // 3 { 1, 0, 0, 1, 1, 0, 0, 1 }, // 4 { 0, 1, 0, 0, 1, 0, 0, 1 }, // 5 { 0, 1, 0, 0, 0, 0, 0, 1 }, // 6 { 0, 0, 0, 1, 1, 0, 1, 1 }, // 7 { 0, 0, 0, 0, 0, 0, 0, 1 }, // 8 { 0, 0, 0, 0, 1, 0, 0, 1 }, // 9 { 1, 1, 1, 1, 1, 1, 1, 1 }, // 10 - blank }; void setup(){ // SEGMENT 핀 출력모드로 설정 for(int i = 0 ; i < 8 ; i++) { pinMode(fndPort[i],OUTPUT); } // Digit 핀 출력 모드로 설정 for(int i = 0 ; i < 4 ; i++) { pinMode(fndDigit[i],OUTPUT); digitalWrite(fndDigit[i],LOW); } } void loop(){ for(int i = 0 ; i < 4 ; i++){ for(int j = 0 ; j < 8 ; j++){ digitalWrite(fndPort[j], fndData[i+1][j]); } digitalWrite(fndDigit[i], HIGH); delay(delayTime); digitalWrite(fndDigit[i], LOW); } if(delayTime > 1) delayTime = delayTime * 0.9; else delayTime = 1; } | cs |
위의 코드를 실행하면 아래 영상과 같이 순환하는 타이밍이 서서히 줄어 들면서 4자리 숫자 모두 동시에 나오는 것처럼 보여지는 것을 볼 수 있습니다.
마무리
4자리 FND의 내부 회로 구성 및 동작 방법을 알아보고, Arduino Uno를 사용하여 4자리 FND를 구동하는 방법
에 대해 소개하였습니다.끝까지 읽어 주셔서 감사합니다.🤣
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #25 8x8 LED Dot Matrix Scroll 문자 스크롤 하기 (0) | 2020.08.21 |
---|---|
아두이노 강좌 #24 8x8 LED Dot Matrix 내부 구성과 기본 동작 방법 (0) | 2020.08.17 |
아두이노 강좌 #22 7-SEGMENT FND 기본 동작 원리 (0) | 2020.08.15 |
아두이노 코딩 : 74HC595로 7-Segment (FND) 제어하기 with 키보드 (0) | 2020.08.09 |
아두이노 강좌 #21 Shift Register 74HC595 로 LED 점멸하기 (1) | 2020.08.09 |