아두이노 세븐 세그먼트 타이머 - adu-ino sebeun segeumeonteu taimeo

아두이노 디지털핀 기본적인 사용법, MsTimer2 라이브러리를 사용하여 Timer Interrupt 를 사용하는 방법은 하단의 관련 포스트를 참조해주세요.

7-Segment

7-Segment 는 8개의 LED로 구성된 표시 장치입니다. 일반적인 7-Segment는 아래 그림과 같이 7개의 획과 1개의 dp 포인트 LED로 구성되어 있습니다. 보통 3,8핀은 7-Segment 가 공통-애노드(Anode)인 경우 전원, 공통-캐소드(Cathode)인 경우 그라운드에 연결 됩니다. 

타이머 인터럽트로 1초마다 7-Segment 의 숫자를 증가하는 코드입니다. 타이머 인터럽트를 사용하기 위해 MsTimer2 라이브러리를 참조하였습니다.

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

#include <MsTimer2.h>

#define segA 3  // 'a' 세그먼트 연결 핀 번호

#define segB 2  // 'b' 세그먼트 연결 핀 번호

#define segC 5  // 'c' 세그먼트 연결 핀 번호

#define segD 6  // 'd' 세그먼트 연결 핀 번호

#define segE 7  // 'e' 세그먼트 연결 핀 번호

#define segF 8  // 'f' 세그먼트 연결 핀 번호

#define segG 9  // 'g' 세그먼트 연결 핀 번호

#define segDP 4 // 'dp' 세그먼트 연결 핀 번호

// main 함수에서 처리 편하게 하기 위해 핀번호 배열을 생성

int fndPort[8= {segA, segB, segC, segD, segE, segF, segG, segDP};

// index 0-9 -> 숫자 1~9

// index 10 -> Blank

int fndData[11][8= {

11111100 }, // 0

01100000 }, // 1

11011010 }, // 2

11110010 }, // 3

01100110 }, // 4

10110110 }, // 5

10111110 }, // 6

11100100 }, // 7

11111110 }, // 8

11110110 }, // 9

00000000 }, // 10 - Blank

};   

// 초기값 10 -> Blank

int iflag = 0;

void setup(){

// 1000ms 간격으로 myTimer() 함수를 호출합니다.

MsTimer2::set(1000, myTimer);

MsTimer2::start();

// 7 Segment 연결된 포트 모두 출력으로 설정

for(int i = 0 ; i < 8 ; i++)

{

pinMode(fndPort[i],OUTPUT);

}

}

void loop(){

static int iCount = 0;

if (iflag == 1)

{

if (iCount == 9) {

iCount = 0;

}

else {

iCount++;

}

for(int i = 0 ; i < 8 ; i++)

digitalWrite(fndPort[i], fndData[iCount][i]); 

iflag = 0;

}

}

void myTimer(){

iflag = 1;

}

cs

아래 결과 영상은 코드 실행 결과를 빠르게 확인하기 위해 200ms 간격으로 카운트 하도록 코드를 수정한 결과입니다. 36번 줄 타이머 인터럽트 설정을 200ms 로 수정하였습니다.

Toplist

최신 우편물

태그