일단 이렇게 생겼습니다. ↑
디지털 시계표시장치인 7 segment라고 하는 것입니다.
사진에서는 한 자릿수 밖에 없지만 여러 자리를 구현할 수 있게 이어진 부품도 존재합니다.
7 segment에는 총 10개의 핀이 있습니다. 7 segment는 핀마다 숫자를 따로 제어할 수 있도록 되어있습니다. 한 부품으로 이어진 led라 보시면 편합니다.
7segment는 두가지 종류가 있습니다. 애노드타입과 캐소드타입 입니다.
제어하는 방식은 같으나 애노드타입은 Vcc(5v)를 , 캐소드타입은 Gnd를 연결해야합니다.
사진출처 - kocoafab
위의 사진이 아두이노와 7 segment를 연결한 회로도입니다. 중간자리에 Vcc 5v를 연결한 것을 보니 애노드 타입이군요.
a자리 - 2번핀 부터 dp(점)자리 - 8번핀 까지 연결했습니다.
저항은 밝기조절을 위해 220~330옴 정도를 사용합니다.
1이라는 숫자를 나타내기 위해서는 b,c를 켜고 다른 LED는 모두 꺼야합니다
2라는 숫자를 나타내기 위해서는 a,b,d,e,g를 켜야합니다.
이를 배열 digitForNum에 0과 1 비트로 저장하고 for문으로 순서대로 뽑아냄으로써 가시적인 숫자를 만들 수 있습니다.
소스코드 ↓
/* 제목 : 7세그먼트로 숫자 표시하기 내용 : 7세그먼트를 사용하여 0부터 9까지 숫자를 표시해 봅시다. */ // 7세그먼트는 총 8개의 LED로 구성이 되어 있습니다. // 본 예제에서는 공통 애노드(Common Anode) 타입의 7세그먼트를 사용함으로, // 켜고자 하는 LED의 핀에 LOW(0) 값을 보내도록 설정합니다. // 반대로, 공통 캐소드(Common Cathode) 타입을 사용할 경우, HIGH(1) 값으로 설정합니다. // 7세그먼트 각각 LED에 핀을 할당합니다. {A, B, C, D, E, F, G, H} int segmentLEDs[] = {2, 3, 4, 5, 6, 7, 8, 9}; // 지정된 LED 개수 int segmentLEDsNum = 8; // 각 숫자에 대한 LED 설정 값을 정의합니다. // 숫자에 매칭되는 LED의 로직레벨을 LOW(0) 상태로 설정합니다. int digitForNum[10][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, 1, 1, 1}, //7 {0, 0, 0, 0, 0, 0, 0, 1}, //8 {0, 0, 0, 0, 1, 0, 0, 1} //9 }; // 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다. // 변수를 선언하거나 초기화를 위한 코드를 포함합니다. void setup() { // 7세그먼트 각각 LED에 연결된 핀을 OUTPUT으로 설정합니다. for (int i = 0 ; i < segmentLEDsNum ; i++) { pinMode(segmentLEDs[i], OUTPUT); } } // setup() 함수가 호출된 이후, loop() 함수가 호출되며, // 블록 안의 코드를 무한히 반복 실행됩니다. void loop() { // 0부터 9까지 숫자를 순서대로 표시합니다. for (int i = 0 ; i < 10 ; i++) { // 각 숫자에 대한 각각 LED의 로직레벨을 설정합니다. for (int j = 0 ; j < segmentLEDsNum ; j++) { digitalWrite(segmentLEDs[j], digitForNum[i][j]); } // 1초 동안 대기합니다. delay(1000); } }
'아두이노' 카테고리의 다른 글
74HC595 [SHIFT REGESTER] (0) | 2017.10.16 |
---|