cwkwondongyang ac kr 7 Segment LED 3 Digit

  • Slides: 49
Download presentation
동양미래대학교 컴퓨터공학부 권춘우(cwkwon@dongyang. ac. kr) 센서활용프로그래밍 - 7 Segment LED - 3 Digit 7

동양미래대학교 컴퓨터공학부 권춘우(cwkwon@dongyang. ac. kr) 센서활용프로그래밍 - 7 Segment LED - 3 Digit 7 Segment LED - RGB LED(3 Color)

목차 LOGO Ø 7 Segment LED § 7 Segment LED(FND) § 7 Segment LED

목차 LOGO Ø 7 Segment LED § 7 Segment LED(FND) § 7 Segment LED 응용 : 전자주사위 제작 Ø 3 Digit 7 Segment LED Ø RGB LED(3 Color) Dongyang Mirae University 센서활용프로그래밍 2 prepared by Choon Woo Kwon

LOGO 7 세그먼트(Seven Segment) LED Dongyang Mirae University 센서활용프로그래밍 3 prepared by Choon Woo

LOGO 7 세그먼트(Seven Segment) LED Dongyang Mirae University 센서활용프로그래밍 3 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED Dongyang Mirae University 센서활용프로그래밍 LOGO 5 prepared by Choon Woo

7 세그먼트(Seven Segment) LED Dongyang Mirae University 센서활용프로그래밍 LOGO 5 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(1) LOGO 7 Segment Common Cathode FND (flexible numeric display)

7 세그먼트(Seven Segment) LED 구동(1) LOGO 7 Segment Common Cathode FND (flexible numeric display) 9 10 7 6 1 2 Dongyang Mirae University 센서활용프로그래밍 6 4 5 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(1) 7 Segment Common Cathode FND Dongyang Mirae University 센서활용프로그래밍

7 세그먼트(Seven Segment) LED 구동(1) 7 Segment Common Cathode FND Dongyang Mirae University 센서활용프로그래밍 LOGO (flexible numeric display) 7 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(1) #define SEG_START 11 // 시작 글자 모양 (11번) case

7 세그먼트(Seven Segment) LED 구동(1) #define SEG_START 11 // 시작 글자 모양 (11번) case 2: // Number 2 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, LOW); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, LOW); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; // 7 Segment FND의 각 Segment 지정 : led 불이 켜지는 숫자 지정 #define #define SEG_A SEG_B SEG_C SEG_D SEG_E SEG_F SEG_G SEG_H 7 6 4 2 1 9 10 5 a // Segment a ******* // Segment b f* *b // Segment c * g * // Segment d ******* // Segment e e* *c // Segment f * * // Segment g ******* * h(DP) // Segment h d void fnd(unsigned char n) { //display_number 함수를 지정 : 숫자모양 생성 switch (n) { case 0: // Number 0 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, LOW); digital. Write(SEG_H, LOW); break; case 1: // Number 1 digital. Write(SEG_A, LOW); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, LOW); break; Dongyang Mirae University LOGO Why? 왜 LED 숫자가 제대로 표시 안되나? How? 어떻게 해결하 지? case 3: // Number 3 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW ); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 4: // Number 4 digital. Write(SEG_A, LOW); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, HIGH ); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; 센서활용프로그래밍 8 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(1) case 5: // Number 5 digital. Write(SEG_A, HIGH); digital.

7 세그먼트(Seven Segment) LED 구동(1) case 5: // Number 5 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, LOW); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, LOW); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 6: // Number 6 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 7: // Number 7 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, LOW); break; Dongyang Mirae University LOGO case 8: // Number 8 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 9: // Number 9 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 10: // POINT digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; 센서활용프로그래밍 9 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(1) case 11: // MINUS digital. Write(SEG_A, LOW); digital. Write(SEG_B,

7 세그먼트(Seven Segment) LED 구동(1) case 11: // MINUS digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 12: // BLANK digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, LOW); break; } } Dongyang Mirae University LOGO void setup() { pin. Mode(SEG_A, OUTPUT); pin. Mode(SEG_B, OUTPUT); pin. Mode(SEG_C, OUTPUT); pin. Mode(SEG_D, OUTPUT); pin. Mode(SEG_E, OUTPUT); pin. Mode(SEG_F, OUTPUT); pin. Mode(SEG_G, OUTPUT); pin. Mode(SEG_H, OUTPUT); } void loop() { int i; fnd(SEG_START ); //처음 시작은 가운데에만 빨간불을 켜 준다(11로 시작) delay(2000); } for(i = 0; i<11; i++) { fnd(i); delay(1000); } 센서활용프로그래밍 10 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(2) LOGO 7 Segment Common Anode FND (flexible numeric display)

7 세그먼트(Seven Segment) LED 구동(2) LOGO 7 Segment Common Anode FND (flexible numeric display) Common Anode FND 배선은 Common Cathode FND 경우 와 어떤 차이가 있지? FND의 Common Pin 연결 § Common Anode : +5 V(Vcc) § Common Cathode : 0 V Dongyang Mirae University 센서활용프로그래밍 11 prepared by Choon Woo Kwon

7 세그먼트(Seven Segment) LED 구동(2) 7 Segment Common Anode FND Dongyang Mirae University 센서활용프로그래밍

7 세그먼트(Seven Segment) LED 구동(2) 7 Segment Common Anode FND Dongyang Mirae University 센서활용프로그래밍 12 LOGO (flexible numeric display) prepared by Choon Woo Kwon

LOGO 7 Segment LED 응용 - 전자 주사위 - Dongyang Mirae University 센서활용프로그래밍 15

LOGO 7 Segment LED 응용 - 전자 주사위 - Dongyang Mirae University 센서활용프로그래밍 15 prepared by Choon Woo Kwon

※ random number 생성 방법 LOGO // 사용 함수 : millis(), random. Seed(), random()

※ random number 생성 방법 LOGO // 사용 함수 : millis(), random. Seed(), random() #define START_BUTTON 11 void setup() { Serial. begin(9600); pin. Mode(START_BUTTON, INPUT); } void loop() { int i, r; while(1) { while(!digital. Read(START_BUTTON)); random. Seed(millis()%1000); millis()함수 값의 하위 자리 3개 수치를 random. Seed() 함수 적용 int r = random(100); (예) millis() 값이 459384 일 경우 ⇒ 384를 random Seed 변수로 사용 Serial. println(r, DEC); delay(200); random() 함수로 최대 100인 random number 생성 // // for (i = 0; i<50; i++) { fnd(r%6+1); r++; delay(10+i*i/5); } } } Dongyang Mirae University 센서활용프로그래밍 17 prepared by Choon Woo Kwon

전자 주사위 제작 – 배선도 LOGO 배선도 : Common Anode FND 사용 Common Cathode

전자 주사위 제작 – 배선도 LOGO 배선도 : Common Anode FND 사용 Common Cathode FND 사용 하는 경우에는 어떻게 배선을 하여야 하는가? 아두이노 핀 #2는 직렬통신의 tx 신 호를 생성하는 목 적으로도 사용됨 에 유의!! FND의 Common Pin 연결 § Common Anode : +5 V(Vcc) § Common Cathode : 0 V Common Anode Type 7 Segment LED 기준 Dongyang Mirae University 센서활용프로그래밍 20 prepared by Choon Woo Kwon

전자 주사위 제작 – 회로도(Schematic) LOGO FND의 Common Pin 연결 § Common Anode :

전자 주사위 제작 – 회로도(Schematic) LOGO FND의 Common Pin 연결 § Common Anode : +5 V(Vcc) § Common Cathode : 0 V Common Anode Type 7 Segment LED 기준 Dongyang Mirae University 센서활용프로그래밍 21 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(1/7) LOGO (실습 내용) 전자 주사위 예제 (1) Common Anode

전자 주사위 제작 – 스케치(1/7) LOGO (실습 내용) 전자 주사위 예제 (1) Common Anode 7 Segment LED를 구성한 다음 Display를 확인한다. (2) 버튼 스위치를 누르면 1, 2, 3, 4, 5, 6 중의 랜덤(random) 한 숫자를 Segment FND에 표시 (3) 전자주사위의 동작 프로그램을 분석한다. (4) 전자주사위의 동작을 동영상으로 제출한다. ※ (참조 자료 출처) www. Arduino. PLUS. cc #define START_BUTTON 11 // 7 Segment #define SEG_A #define SEG_B #define SEG_C #define SEG_D #define SEG_E #define SEG_F #define SEG_G #define SEG_H a 2 3 4 5 6 7 8 9 Dongyang Mirae University // Segment a // Segment b // Segment c // Segment d // Segment e // Segment f // Segment g // Segment h <스케치 소스> Common Anode Type 7 Segment LED 기준 ******* f* *b * g * ******* e* *c * * ******* * h d 센서활용프로그래밍 22 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(2/7) LOGO void fnd(unsigned char n) { switch (n) {

전자 주사위 제작 – 스케치(2/7) LOGO void fnd(unsigned char n) { switch (n) { case 0: // Number 0 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, HIGH); break; case 1: // Number 1 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, HIGH); break; case 2: // Number 2 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; Dongyang Mirae University 센서활용프로그래밍 23 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(3/7) LOGO case 3: // Number 3 digital. Write(SEG_A, LOW);

전자 주사위 제작 – 스케치(3/7) LOGO case 3: // Number 3 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH ); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; case 4: // Number 4 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, LOW ); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; case 5: // Number 5 digital. Write(SEG_A, LOW); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; Dongyang Mirae University 센서활용프로그래밍 24 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(4/7) LOGO case 6: // Number 6 digital. Write(SEG_A, HIGH);

전자 주사위 제작 – 스케치(4/7) LOGO case 6: // Number 6 digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; case 7: // Number 7 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, HIGH); break; case 8: // Number 8 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, LOW); digital. Write(SEG_E, LOW); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; Dongyang Mirae University 센서활용프로그래밍 25 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(5/7) LOGO case 9: // Number 9 digital. Write(SEG_A, LOW);

전자 주사위 제작 – 스케치(5/7) LOGO case 9: // Number 9 digital. Write(SEG_A, LOW); digital. Write(SEG_B, LOW); digital. Write(SEG_C, LOW); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, LOW); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; case 10: // POINT digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, LOW); break; case 11: // MINUS digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, LOW); digital. Write(SEG_H, HIGH); break; Dongyang Mirae University 센서활용프로그래밍 26 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(6/7) LOGO case 12: // BLANK digital. Write(SEG_A, HIGH); digital.

전자 주사위 제작 – 스케치(6/7) LOGO case 12: // BLANK digital. Write(SEG_A, HIGH); digital. Write(SEG_B, HIGH); digital. Write(SEG_C, HIGH); digital. Write(SEG_D, HIGH); digital. Write(SEG_E, HIGH); digital. Write(SEG_F, HIGH); digital. Write(SEG_G, HIGH); digital. Write(SEG_H, HIGH); break; } } void setup() { pin. Mode(SEG_A, OUTPUT); pin. Mode(SEG_B, OUTPUT); pin. Mode(SEG_C, OUTPUT); pin. Mode(SEG_D, OUTPUT); pin. Mode(SEG_E, OUTPUT); pin. Mode(SEG_F, OUTPUT); pin. Mode(SEG_G, OUTPUT); pin. Mode(SEG_H, OUTPUT); } Dongyang Mirae University 센서활용프로그래밍 27 prepared by Choon Woo Kwon

전자 주사위 제작 – 스케치(7/7) LOGO void loop() { int i, r; fnd(11); while(1)

전자 주사위 제작 – 스케치(7/7) LOGO void loop() { int i, r; fnd(11); while(1) { while(!digital. Read(START_BUTTON)) ; random. Seed(millis()%1000); int r = random(100); for (i = 0; i<50; i++) { fnd(r%6+1); r++; delay(10+i*i/5); } } } Dongyang Mirae University 센서활용프로그래밍 28 prepared by Choon Woo Kwon

LOGO 3 Digit 7 Segment LED Dongyang Mirae University 센서활용프로그래밍 29 prepared by Choon

LOGO 3 Digit 7 Segment LED Dongyang Mirae University 센서활용프로그래밍 29 prepared by Choon Woo Kwon

3 Digit 7 Segment LED - Data Sheet Dongyang Mirae University 센서활용프로그래밍 LOGO prepared

3 Digit 7 Segment LED - Data Sheet Dongyang Mirae University 센서활용프로그래밍 LOGO prepared by Choon Woo Kwon

3 Digit 7 Segment LED – 핀 번호 & 세그먼트 LOGO 3 Digit 7

3 Digit 7 Segment LED – 핀 번호 & 세그먼트 LOGO 3 Digit 7 Segment LED 핀 번호 12 11 10 9 8 7 1 2 3 4 5 6 NC (연결 없음) 3 Digit 7 Segment LED 핀 번호 Dongyang Mirae University 센서활용프로그래밍 prepared by Choon Woo Kwon

3 Digit 7 Segment LED - 배선도 Auduino 출력 핀 번호 LOGO 3 Digit

3 Digit 7 Segment LED - 배선도 Auduino 출력 핀 번호 LOGO 3 Digit 7 Segment LED 핀 번호 13 12 11 9 10 7 8 5 6 3 4 12 11 10 9 8 7 1 2 3 4 5 6 NC (연결 없음) 3 Digit 7 Segment LED 핀 번호 LED #8 LED #12 LED #3 LED #5 LED #10 LED #1 LED #2 LED #4 LED #7 LED #11 3 Digit 7 Segment LED 핀 번호 Dongyang Mirae University 센서활용프로그래밍 [Connection] LED #9 3 DIGIT LED 세그 먼트 아두 이노 1 e 9 2 d 8 3 DP 12 4 c 7 5 g 11 6 NC NC 7 b 6 8 Dig-3 4 9 Dig-2 3 10 f 10 11 a 5 12 Dig-1 13 prepared by Choon Woo Kwon

3 Digit 7 Segment LED - 회로도 LOGO 3 Digit 7 Segment LED 부품

3 Digit 7 Segment LED - 회로도 LOGO 3 Digit 7 Segment LED 부품 내부 Dongyang Mirae University 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-1) 3 Digit 7 Segment LED // 1 digit에 0~9까지 출력하기 int digits[10][7]= {

(실습-1) 3 Digit 7 Segment LED // 1 digit에 0~9까지 출력하기 int digits[10][7]= { //a. b. c. d. e. f. g {0, 0, 0, 1}, //0 {1, 0, 0, 1, 1}, //1 {0, 0, 1, 0}, //2 {0, 0, 1, 1, 0}, //3 {1, 0, 0, 1, 1, 0, 0}, //4 {0, 1, 0, 0}, //5 {0, 1, 0, 0, 0}, //6 {0, 0, 0, 1, 1}, //7 {0, 0, 0, 0}, //8 {0, 0, 0, 1, 1, 0, 0}//9 }; Dongyang Mirae University LOGO void setup() { for(int i=3; i<=13; i++) { pin. Mode(i, OUTPUT); } digital. Write(13, HIGH); //digit-1 digital. Write(3, LOW); //digit-2 digital. Write(4, LOW); //digit-3 digital. Write(12, 0); //DP pin high 대신 low 면 도트가 켜진다 } int num=0; void loop() { for(int j=0; j<10; j++) // 세그먼트 숫자표현 { for(int i=5; i<12; i++) { //핀번호 digital. Write(i, digits[j][i-5]); // 시작위치 [0][0]으로 맞춘다 } delay(1000); } } 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-2) 시리얼 모니터 이용 숫자 표시(한자리) int digits[10][7]= { //a. b. c. d. e.

(실습-2) 시리얼 모니터 이용 숫자 표시(한자리) int digits[10][7]= { //a. b. c. d. e. f. g {0, 0, 0, 1}, {1, 0, 0, 1, 1}, {0, 0, 1, 0}, {0, 0, 1, 1, 0}, {1, 0, 0, 1, 1, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0} }; LOGO void setup() { for(int i=3; i<=13; i++) { pin. Mode(i, OUTPUT); } //0 //1 //2 //3 //4 //5 //6 //7 //8 digital. Write(13, HIGH); //digit-1 digital. Write(3, LOW); //digit-2 digital. Write(4, LOW); //digit-3 digital. Write(12, HIGH); //DP pin high 대신 low 면 도트가 켜진다 //9 Serial. begin(9600); } int num=1; void loop() { int count=0; if(Serial. available()) { num=Serial. parse. Int(); } for(int i=5; i<12; i++) { digital. Write(i, digits[num][i-5]); } } Dongyang Mirae University 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-3) 시리얼 모니터 이용 숫자 표시(두자리) int digits[10][7]= { //a. b. c. d. e.

(실습-3) 시리얼 모니터 이용 숫자 표시(두자리) int digits[10][7]= { //a. b. c. d. e. f. g {0, 0, 0, 1}, {1, 0, 0, 1, 1}, {0, 0, 1, 0}, {0, 0, 1, 1, 0}, {1, 0, 0, 1, 1, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0} }; int num=00; //초기숫자 int num 1=0; int num 2=0; void loop() { if(Serial. available()) { num=Serial. parse. Int(); } num 1=num/10; // 몫 num 2=num%10; //나머지 digital. Write(3, LOW); digital. Write(13, HIGH); for(int i=5; i<12; i++) { digital. Write(i, digits[num 1][i-5]); //몫을 첫번째 넣는다 } delay(10); //0 //1 //2 //3 //4 //5 //6 //7 //8 //9 void setup() { for(int i=3; i<=13; i++) pin. Mode(i, OUTPUT); digital. Write(13, HIGH); //digit-1 digital. Write(3, HIGH); //digit-2 digital. Write(4, LOW); //digit-3 digital. Write(12, HIGH); //DP pin high 대신 low 면 도트가 켜진다 Serial. begin(9600); } Dongyang Mirae University LOGO digital. Write(3, HIGH); digital. Write(13, LOW); for(int i=5; i<12; i++) { digital. Write(i, digits[num 2][i-5]); //나머지를 두번째 넣는다 } delay(10); digital. Write(3, LOW); } 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-4) 시리얼 모니터 이용 숫자 표시(세자리) int digits[10][7]= //digits[표시숫자][LED segment] { //a. b. c.

(실습-4) 시리얼 모니터 이용 숫자 표시(세자리) int digits[10][7]= //digits[표시숫자][LED segment] { //a. b. c. d. e. f. g 표시숫자에 따른 LED segment 값 {0, 0, 0, 1}, //0 {1, 0, 0, 1, 1}, //1 {0, 0, 1, 0}, //2 {0, 0, 1, 1, 0}, //3 {1, 0, 0, 1, 1, 0, 0}, //4 {0, 1, 0, 0}, //5 {0, 1, 0, 0, 0}, //6 {0, 0, 0, 1, 1}, //7 {0, 0, 0, 0}, //8 {0, 0, 0, 1, 1, 0, 0} //9 }; LOGO int num=127; //초기값 int num 1=0; //몫 int num 2=0; //나머지 int num 3=0; //나머지의 몫 int num 4=0; //나머지의 나머지 void loop() { if(Serial. available()) num=Serial. parse. Int(); // num이 127 경우 예시 num 1=num/100; //1 num 2=num%100; //27 num 3=num 2/10; //2 num 4=num 2%10; //7 void setup() { for(int i=3; i<=13; i++) pin. Mode(i, OUTPUT); digital. Write(3, LOW); digital. Write(4, LOW); digital. Write(13, HIGH); //몫 digital. Write(13, HIGH); //digit-1 digital. Write(3, HIGH); //digit-2 digital. Write(4, HIGH); //digit-3 digital. Write(12, HIGH); //DP pin high 대신 low 면 도트가 켜진다 Serial. begin(9600); for(int i=5; i<12; i++) { digital. Write(i, digits[num 1][i-5]); //몫을 첫 번째 넣는다 } // 백의자리 보인다 } Dongyang Mirae University 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-4) 시리얼 모니터 이용 숫자 표시(세자리) LOGO delay(5); digital. Write(4, LOW); digital. Write(3, HIGH);

(실습-4) 시리얼 모니터 이용 숫자 표시(세자리) LOGO delay(5); digital. Write(4, LOW); digital. Write(3, HIGH); digital. Write(13, LOW); for(int i=5; i<12; i++) { digital. Write(i, digits[num 3][i-5]); //나머지의 몫 } // 십의 자리 보인다 delay(5); digital. Write(4, HIGH); digital. Write(3, LOW); digital. Write(13, LOW); for(int i=5; i<12; i++) { digital. Write(i, digits[num 4][i-5]); //나머지의 나머지 } //1의자리 보인다 delay(5); digital. Write(4, LOW); } Dongyang Mirae University 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-5) 3 Digit 7 Segment LED : 000~999 표시(세자리)LOGO //Millis 함수로 999초 나타내기(3 Digit

(실습-5) 3 Digit 7 Segment LED : 000~999 표시(세자리)LOGO //Millis 함수로 999초 나타내기(3 Digit 7 Segment LED) // Arduino I/O Pin number for enabling left/center/right Digit #define Dig 1 13 // Arduino pin # for Digit 1(left) #define Dig 2 3 // Arduino pin # for Digit 2(center) #define Dig 3 4 // Arduino pin # for Digit 3(right) void center. Digit(int pin. Num 2, int pin. Num 3, int pin. Num 4) { digital. Write(pin. Num 4, LOW); //4 digital. Write(pin. Num 3, HIGH); //3 digital. Write(pin. Num 2, LOW); //2 digit int left, center, right; int digits[10][7]= { {0, 0, 0, 1}, {1, 0, 0, 1, 1}, {0, 0, 1, 0}, {0, 0, 1, 1, 0}, {1, 0, 0, 1, 1, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 1, 1}, {0, 0, 0, 0}, {0, 0, 1, 0, 0} }; center=millis()/1000%10; //1초 //숫자 0 -9에 대한 모양 데이터 //숫자 //숫자 //숫자 0 1 2 3 4 5 6 7 8 9 Dongyang Mirae University for(int i=0; i<=center; i++) { for(int a=5; a<12; a++) { digital. Write(a, digits[center][a-5]); } Serial. println(center); } } 센서활용프로그래밍 prepared by Choon Woo Kwon

(실습-5) 3 Digit 7 Segment LED : 000~999 표시(세자리)LOGO void left. Digit(int pin. Num

(실습-5) 3 Digit 7 Segment LED : 000~999 표시(세자리)LOGO void left. Digit(int pin. Num 2, int pin. Num 3, int pin. Num 4) { digital. Write(pin. Num 4, LOW); //4 digital. Write(pin. Num 3, LOW); //3 digital. Write(pin. Num 2, HIGH); //2 digit for(int i=0; i<=right; i++) { for(int a=5; a<12; a++) { digital. Write(a, digits[right][a-5]); } Serial. println(right); } left=millis()/10000%10; //10초 for(int i=0; i<=left; i++) { for(int a=5; a<12; a++) { digital. Write(a, digits[left][a-5]); } Serial. println(left); } } void right. Digit(int pin. Num 2, int pin. Num 3, int pin. Num 4) { digital. Write(pin. Num 4, HIGH); //4 digital. Write(pin. Num 3, LOW); //3 digital. Write(pin. Num 2, LOW); //2 digit } void setup() { for(int i=2; i<=13; i++) { pin. Mode(i, OUTPUT); } Serial. begin(9600); digital. Write(12, 1); //DP(decimal point: dot) OFF } void loop() { right. Digit(Dig 1, Dig 2, Dig 3); center. Digit(Dig 1, Dig 2, Dig 3); left. Digit(Dig 1, Dig 2, Dig 3); } right=millis()/100%10; //0. 1초 Dongyang Mirae University 센서활용프로그래밍 prepared by Choon Woo Kwon

LOGO RGB LED(3 Color) Dongyang Mirae University 센서활용프로그래밍 44 prepared by Choon Woo Kwon

LOGO RGB LED(3 Color) Dongyang Mirae University 센서활용프로그래밍 44 prepared by Choon Woo Kwon

RGB LED(3 Color) 활용 준비물 (Type-1) LOGO (Type-2) Common Cathode RGB LED Dongyang Mirae

RGB LED(3 Color) 활용 준비물 (Type-1) LOGO (Type-2) Common Cathode RGB LED Dongyang Mirae University 센서활용프로그래밍 45 prepared by Choon Woo Kwon

RGB LED(3 Color) 활용 - 배선도 LOGO B G Dongyang Mirae University 센서활용프로그래밍 46

RGB LED(3 Color) 활용 - 배선도 LOGO B G Dongyang Mirae University 센서활용프로그래밍 46 R prepared by Choon Woo Kwon

RGB LED(3 Color) 활용 – 회로도(Schematic) Dongyang Mirae University 센서활용프로그래밍 47 LOGO prepared by

RGB LED(3 Color) 활용 – 회로도(Schematic) Dongyang Mirae University 센서활용프로그래밍 47 LOGO prepared by Choon Woo Kwon

RGB LED(3 Color) 활용 – 스케치(1/2) LOGO // 펄스폭 변조(PWM) 이용 RGB Color LED의

RGB LED(3 Color) 활용 – 스케치(1/2) LOGO // 펄스폭 변조(PWM) 이용 RGB Color LED의 색상을 순차적으로 변경 int ledpin. Red = 11; int ledpin. Green = 9; int ledpin. Blue = 10; unsigned int tr, tg, tb; unsigned int p = 0; void wheel(unsigned int i) { unsigned int k; unsigned int m; i = i%0 x 300; m = i&0 x. FF; k = i&0 x 300; switch(k) { case 0 x 0000: tr = 0 x. FF - m; // Red Decrement tg = m; // Green Increment tb = 0; // Blue Off break; case 0 x 0100: tr = 0; // Red Off tg = 0 x. FF - m; // Green Decrement tb = m; // Blue Increment break; case 0 x 0200: tr = m; // Red Increment tg = 0; // Green Off tb = 0 x. FF - m; // Blue Decrement break; } } Dongyang Mirae University 센서활용프로그래밍 48 prepared by Choon Woo Kwon

RGB LED(3 Color) 활용 – 스케치(2/2) LOGO // …………… 계속 ……………. . void setup()

RGB LED(3 Color) 활용 – 스케치(2/2) LOGO // …………… 계속 ……………. . void setup() { // put your setup code here, to run once: } void loop() { wheel(p); analog. Write(ledpin. Red, tr); analog. Write(ledpin. Green, tg); analog. Write(ledpin. Blue, tb); delay(15); p++; p %= 0 x 300; } (실습 내용) (1) loop() 에서 delay() 값을 5, 500, 1000으로 수정하여 동작을 확인하라. (2) Red와 Blue 색만 변경하도록 프로그램을 수정하라. -> (동작을 동영상으로 제출) (3) 이 프로그램의 동작을 분석하라. -> (보고서 작성 후 제출) Dongyang Mirae University 센서활용프로그래밍 49 prepared by Choon Woo Kwon

LOGO Dongyang Mirae University 센서활용프로그래밍 50 prepared by Choon Woo Kwon

LOGO Dongyang Mirae University 센서활용프로그래밍 50 prepared by Choon Woo Kwon