메뉴 건너뛰기

목록
2022.05.05 13:49

아두이노 공부 fnd 편

profile
조회 수 122 댓글 4 예스잼 6 노잼 0

KakaoTalk_20220505_131954469_01.jpgKakaoTalk_20220505_131954469.jpg

 

 

FND란 위같은 부품을 뜻하며 7-segment라고도 불리는 전자부품임 

0~9까지의 숫자를 표시할수 있으며 한칸당 led가 하나씩 들어있다고 생각하면됨 

다리가 총 10개있는데 

 

 

 

2FND.jpg

 

이렇게 연결되어있슴 저 세모난거에 짝때기 그어져있는게 led이며 총 7개의 led와 dp가 있음 

dp는 맨위 사진 숫자밑에 있는 . 을 말함 

만약 숫자 1을 표시 하고 싶다고 하면 led b와 led c만 on하면 됨 아주 젓밥이기때문에 아두이노 핀 출력만 할수있으면 쉽게 숫자를 표시할수잇음  

그리고 왼쪽은 공통애노드 오른쪽은 공통 캐소드인데 걍 led가 달려있는 방향이 다르다고 생각하면됨 

이 한칸짜리 fnd를 4개 붙혀놓은게 있는데 저는 오늘 그것을 제어해볼것임 

 

 

3833933_28133606large.jpg

 

image.png

 

이렇게 생겼고 위에랑 비교해보면 com1,com2,com3,com4가 생긴것을 알수있음 

각각 com1에 신호를 주면 첫번째 칸이 켜지고 com2에 신호를 주면 두번째 칸이 켜짐 

즉 4개 붙어있는것도 아주 젖밥이라고 생각하고 해봤으나 생각한것 처럼 잘안되었음 

이유는 회로도를 보면 알수있음 

 

제목_없음.png

이게 4칸짜리 fnd의 회로도인데 잘보면 4칸의 각각 a는 a끼리,b는 b끼리  전부 연결되어있음 

이말은 즉 만약 1을 표시하기 위해 b와 c에 신호를 주면 모든 칸에서 숫자 1이 표시됨 

각각 칸에서 따로 제어하는게 아니라 묶여있기때문에 모든 칸에 똑같은 숫자가 나오게되는것임.... 

 

그래서 여기서 우리는 새로운 방법을 생각해봐야함 각각의 칸은 선택할수있지만 어떻게 하든 숫자를 표시하는 a~g까지의 포트는 서로 공유하고 있음... 

그렇기에 사람들이 생각한 방법은 눈을 속이는 방법임 

눈을 속이는 방법이 무엇이냐면 말그대로 fnd를 개빠르게 동작시켜서 사람들의 눈을 속이는것임 

a~f의 칸을 공유하지만 각각의 칸은 선택할수 있으므로 1번째 칸을 선택하고 숫자를 개빠르게 뿌리고 그다음 두번째 칸을 선택하고 다른 숫자를 재빠르게 뿌리는것임 ㅡ.. 

이러한 방식으로 fnd를 고속동작 시키면 사람들은 각각 칸에 다른숫자가 표시되는것처럼 보이게 할수있음 

사실은 빠르게 한칸씩 켜지고 있는것인데 말임...

 

어쨋든 설명은 이정도로 하고 저는 오늘 간단하게 카운터를 만들어볼것임 스위치를 누르면 숫자가 커지는 간단한 프로그램임 

 

Amazing Habbi-Bombul.png

 

image.png

 

 

제가 팅커캐드로 개힘들게 그린 회로도임 아두이노 우노핀에 맞춰서 0번핀~7번은 a~f에 연결

com1 ~ com4 는 8번 핀 ~ 11번핀 마지막으로 스위치는 12번 핀에 연결하였음 

 

#include <Arduino.h>
 
int seg[8] = {0,0,0,0,0,0,0,0}; //0:A ~ 7:dp
int com[4] = {8,9,10,11}; //0: com1 ~ 3:com4
int num = 0000;
int com1 = 0;
int com2 = 0;
int com3 = 0;
int com4 = 0;
 
void setup() {
 
  pinMode(12,INPUT);
  for(int i=0 ; i<=7 ; i++){
    seg[i] = i;
    pinMode(seg[i],OUTPUT);
  }
  for(int i=8 ; i<=11; i++){
    com[i-8] = i;
    pinMode(com[i-8],OUTPUT);
  }
 
}
 
void seg_select(int num){
  switch (num)
  {
  case 0:
    seg[7] = 0; seg[6] = 0; seg[5] = 1; seg[4] = 1; seg[3] = 1; seg[2] = 1; seg[1] = 1; seg[0] = 1;
    break;
  case 1:
    seg[7] = 0; seg[6] = 0; seg[5] = 0; seg[4] = 0; seg[3] = 0; seg[2] = 1; seg[1] = 1; seg[0] = 0;
    break;
  case 2:
    seg[7] = 0; seg[6] = 1; seg[5] = 0; seg[4] = 1; seg[3] = 1; seg[2] = 0; seg[1] = 1; seg[0] = 1;
    break;
  case 3:
    seg[7] = 0; seg[6] = 1; seg[5] = 0; seg[4] = 0; seg[3] = 1; seg[2] = 1; seg[1] = 1; seg[0] = 1;
    break;
  case 4:
    seg[7] = 0; seg[6] = 1; seg[5] = 1; seg[4] = 0; seg[3] = 0; seg[2] = 1; seg[1] = 1; seg[0] = 0;
    break;
  case 5:
    seg[7] = 0; seg[6] = 1; seg[5] = 1; seg[4] = 0; seg[3] = 1; seg[2] = 1; seg[1] = 0; seg[0] = 1;
    break;
  case 6:
    seg[7] = 0; seg[6] = 1; seg[5] = 1; seg[4] = 1; seg[3] = 1; seg[2] = 1; seg[1] = 0; seg[0] = 1;
    break;
  case 7:
    seg[7] = 0; seg[6] = 0; seg[5] = 0; seg[4] = 0; seg[3] = 0; seg[2] = 1; seg[1] = 1; seg[0] = 1;
    break;
  case 8:
    seg[7] = 0; seg[6] = 1; seg[5] = 1; seg[4] = 1; seg[3] = 1; seg[2] = 1; seg[1] = 1; seg[0] = 1;
    break;
  case 9:
    seg[7] = 0; seg[6] = 1; seg[5] = 1; seg[4] = 0; seg[3] = 0; seg[2] = 1; seg[1] = 1; seg[0] = 1;
    break;
  default:
    break;
  }
}
 
void com_select(int comd){
  switch (comd)
  {
  case 1:
    for(int i=0 ; i<=3;i++){
      if(i == 0) digitalWrite(com[i],0);
      else digitalWrite(com[i],1);
    }
    break;
  case 2:
    for(int i=0 ; i<=3;i++){
      if(i == 1) digitalWrite(com[i],0);
      else digitalWrite(com[i],1);
    }
    break;
  case 3:
    for(int i=0 ; i<=3;i++){
      if(i == 2) digitalWrite(com[i],0);
      else digitalWrite(com[i],1);
    }
    break;
  case 4:
    for(int i=0 ; i<=3;i++){
      if(i == 3) digitalWrite(com[i],0);
      else digitalWrite(com[i],1);
    }
    break;
  default:
    break;
  }
}
 
void loop() {
  if(digitalRead(12)){
    num++;
  }
 
  com1 = (num/1000)%10;
  com2 = (num/100)%10;
  com3 = (num/10)%10;
  com4 = (num/1)%10;
 
  com_select(1);
  seg_select(com1);
  for(int i=0;i<=7;i++){
    digitalWrite(i,seg[i]);
  }
  delay(5);
 
  com_select(2);
  seg_select(com2);
  for(int i=0;i<=7;i++){
    digitalWrite(i,seg[i]);
  }
  delay(5);
 
  com_select(3);
  seg_select(com3);
  for(int i=0;i<=7;i++){
    digitalWrite(i,seg[i]);
  }
  delay(5);
 
  com_select(4);
  seg_select(com4);
  for(int i=0;i<=7;i++){
    digitalWrite(i,seg[i]);
  }
  delay(5);
}

 

코딩에 대한 전문적인지식은 별로없기에 주먹구구식으로 코딩해보았음 

loop 함수에서 1번칸 선택후 num숫자를 표시하고 다음은 2번칸 선택후  num숫자표시하고  ㅡ 이렇게 해서 모든칸을 무한반복해서 표시하고 

따로 스위치가 눌리면 num을 증가해서 숫자가 커지도록 하엿음 

 

KakaoTalk_20220505_131954469_03.jpg

 

KakaoTalk_20220505_132000166.mp4

 

 

잘됨  ㅇㅇ 


List of Articles
번호 제목 글쓴이 날짜 조회 수 추천
공지 수용소닷컴 이용약관 file asuka 2020.05.16 1304 1
1102 대학생 때 세웠던 목표를 이뤘음 7 file 마루쉐 2021.09.14 188 10
1101 오늘 한 프로젝트: 그래픽 광량 표현 12 file 우지챠 2021.01.05 245 8
1100 키 마우스 매핑 프로그램 만들었음 10 file '`' 2022.08.30 205 6
» 아두이노 공부 fnd 편 4 file 코르캐쉬 2022.05.05 122 6
1098 서버 3대 렌탈함 4 file 만년필 2021.07.18 110 6
1097 정보) 수용서의 기본소양 1편, 짤검색에 대해서 araboji. 8 file 하루각하 2021.01.06 223 6
1096 좆본 IT 취업 가이드 ~ 간략판 ~ 9 抱き枕 2020.07.22 243 6
1095 노트북 정보 모음 13 file 으ㅇ유ㅏ」 2021.12.14 155 5
1094 오늘자 리팩터링 9 file 마루쉐 2021.01.03 171 5
1093 올해 프로그래머로서 제 목표 1 마루쉐 2023.01.04 52 4
1092 이거 키트 절대 사지 마라 12 file 삼육두유 2022.10.10 109 4
1091 우흥 4 file 삼육두유 2021.09.23 108 4
1090 잡아도 잡아도 끊임없이 나오는 버그 2 file 머스크멜론 2021.09.11 96 4
1089 초간단 js 추첨기 4 하야한아이 2021.04.07 125 4
1088 개좆소 이벤트 추첨기 구상 6 스마일 2020.07.17 126 4
1087 UPS 2종 비교 (델타 N-1K, APC SMT750iC) 5 file 만년필 2021.08.29 156 3
1086 swift enum을 활용한 코드 수정 1 file 마루쉐 2021.03.10 69 3
1085 2024년도 기사, 산업기사 시험 일정 및 주요 변경사항 2 file 말랑이 2023.12.29 78 2
1084 그리드 2022.12.06 13 2
1083 이것저것 쓸만한 사이트 2 5 file 저능아 2022.11.22 32 2
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 56 Next
/ 56