실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다. 참고로 본 키트의 학습에 필요한 부품 중 없는 부품이 있어 부득이하게 실습의 순서가 변경되었습니다. 혹 위 키트 구매를 생각하신다면 없는 부품이 많이 있다는 점 알아주시기 바랍니다.
< 준비물 >
아두이노 우노 R3 : 1개
USB 케이블 : 1개
점퍼 케이블(숫숫) : 25개가량
브레드 보드 : 1개, 830홀 사용
저항 : 10KΩ 5개, 220Ω 8개
스위치 : 5개
7세그먼트 : 1개
스위치를 이용 홀수의 숫자를 출력하는 실습니다. 각각의 스위치를 클릭시 1, 3, 5, 7, 9가 7세그먼트에 출력 되는 실습을 통해 7세그먼트에서의 숫자 출력 방법을 학습해 보겠습니다.
오늘 사용된 7세그먼트는 Cathode Common 타입입니다.
팅커 캐드 링크입니다 : https://www.tinkercad.com/things/6568Gqwtz5O
< 참고 지식 >
⦿ 7 세그먼트(7 Segment),FND(Flexible Numeric Display) : 7개의 LED로 각각의 획의 조합으로 숫자나 문자를 나타 낼 수 있는 표시 장치로 FND(Flexible Numeric Display)라고도 합니다. 전자회로에서 수치 표현을 위해 주로 사용됩니다.
자세한 내용은 https://coding-sinki.tistory.com/17 에서 참조하세요.
< 실습 코드 >
byte seven_seg_digits[10][8] =
{
/* 7세그먼트에 표현할 숫자값을 2진수 2차배열 형태로 선언 함
a, b, c, d, e, f, g, h. 실습에 사용된 7세그먼트는 Cathode Common 타입임*/
{1, 1, 1, 1, 1, 1, 0, 0}, //0 글자 형태 표현
{0, 1, 1, 0, 0, 0, 0, 0}, //1 글자 형태 표현
{1, 1, 0, 1, 1, 0, 1, 0}, //2 글자 형태 표현
{1, 1, 1, 1, 0, 0, 1, 0}, //3 글자 형태 표현
{0, 1, 1, 0, 0, 1, 1, 0}, //4 글자 형태 표현
{1, 0, 1, 1, 0, 1, 1, 0}, //5 글자 형태 표현
{1, 0, 1, 1, 1, 1, 1, 0}, //6 글자 형태 표현
{1, 1, 1, 0, 0, 1, 0, 0}, //7 글자 형태 표현
{1, 1, 1, 1, 1, 1, 1, 0}, //8 글자 형태 표현
{1, 1, 1, 1, 0, 1, 1, 0} //9 글자 형태 표현
};
// 각 핀정의
int Switch1_Pin = A1; //스위치1
int Switch2_Pin = A2; //스위치2
int Switch3_Pin = A3; //스위치3
int Switch4_Pin = A4; //스위치4
int Switch5_Pin = A5; //스위치5
int Fnd_a = 7; //FND "a" 자리 핀
int Fnd_b = 6; //FND "b" 자리 핀
int Fnd_c = 5; //FND "c" 자리 핀
int Fnd_d = 4; //FND "d" 자리 핀
int Fnd_e = 3; //FND "e" 자리 핀
int Fnd_f = 2; //FND "f" 자리 핀
int Fnd_g = 1; //FND "g" 자리 핀
int Fnd_dot = 0; //FND "dot" 자리 핀
void setup()
{
pinMode(Fnd_a, OUTPUT); //Fnd 'a'의 핀출력 포트 설정
pinMode(Fnd_b, OUTPUT); //Fnd 'b'의 핀출력 포트 설정
pinMode(Fnd_c, OUTPUT); //Fnd 'c'의 핀출력 포트 설정
pinMode(Fnd_d, OUTPUT); //Fnd 'd'의 핀출력 포트 설정
pinMode(Fnd_e, OUTPUT); //Fnd 'e'의 핀출력 포트 설정
pinMode(Fnd_f, OUTPUT); //Fnd 'f'의 핀출력 포트 설정
pinMode(Fnd_g, OUTPUT); //Fnd 'g'의 핀출력 포트 설정
pinMode(Fnd_dot, OUTPUT); //Fnd 'dot'의 핀출력 포트 설정
writeDot(0); //FND에 도트(dot) LED OFF
pinMode(Switch1_Pin, INPUT); //스위치 1번핀 입력 포트 설정
pinMode(Switch2_Pin, INPUT); //스위치 2번핀 입력 포트 설정
pinMode(Switch3_Pin, INPUT); //스위치 3번핀 입력 포트 설정
pinMode(Switch4_Pin, INPUT); //스위치 4번핀 입력 포트 설정
pinMode(Switch5_Pin, INPUT); //스위치 5번핀 입력 포트 설정
}
void writeDot(byte dot) //도트(Dot)Led On/Off 함수
{
digitalWrite(7, dot);
}
void NumberDisplay(byte num) //FND 디스플레이 함수
{
int j;
for (j = 7; j >= 0; j--) // a~g
{digitalWrite( 7 - j , seven_seg_digits[num][j]);}
}
/*스위치를 이용하여 FND에 출력 되는 숫자를 표현할 수 있다.
다수의 스위치를 사용하는 만큼 다른 기능도 추가하여 구현할 수 있다. */
void loop()
{
if (digitalRead(Switch1_Pin) == LOW) //첫번째 스위치 누르면
{
NumberDisplay(1);//FND 모듈에 숫자 1출력
}
else if (digitalRead(Switch2_Pin) == LOW) //두 번째 스위치를 누르면
{
NumberDisplay(3);//FND 모듈에 숫자 3출력
}
else if (digitalRead(Switch3_Pin) == LOW) //세 번째 스위치를 누르면
{
NumberDisplay(5);//FND 모듈에 숫자 5출력
}
else if (digitalRead(Switch4_Pin) == LOW) //네 번째 스위치를 누르면
{
NumberDisplay(7);//FND 모듈에 숫자 7출력
}
else if (digitalRead(Switch5_Pin) == LOW) //다섯 번째 스위치를 누르면
{
NumberDisplay(9);//FND 모듈에 숫자 9출력
}
else // 스위치를 누르지 않을 경우
{
NumberDisplay(0);//FND 모듈에 숫자 0출력
}
}
※ 위 실습 처럼 output pin을 0,1 사용시 아두이노 스케치에서 upload 시 error 가 발생 할수 있습니다. 이는 RX, TX 핀으로 0, 1을 사용하면서 충돌이 생기는것 같습니다. 이때에는 UPLOAD시에만 0, 1 핀을 제거 하시고 UPLOAD하시면 됩니다. 참조 하세요
'Arduino > Arduinio기초 실습' 카테고리의 다른 글
8장. 기울기 센서(Ball Switch) & LED 실습 (0) | 2022.04.07 |
---|---|
7장. 자이로 센서 모듈 실습 (0) | 2022.04.06 |
5장. 가변저항 10K 실습 (0) | 2022.04.02 |
4장. 시리얼 통신 실습 (0) | 2022.04.02 |
3장. 74HC595, LED 실습 (0) | 2022.04.01 |