메뉴 건너뛰기

목록
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 1312 1
1070 필기시험 떨어짐 3 또치면과락 2024.02.21 129 0
1069 막상 해보니 셀레니움으로는 못할거 같기도 하네 17 노동자 2021.10.19 129 0
1068 컴퓨터가 진짜 일이 빠르긴하구나 14 지적장애1급 2021.04.14 128 0
1067 님들 issue label에서 이 영어단어가 뭘 뜻하는지 알겠음? 8 file 다람쥐 2020.06.14 127 0
1066 사실 견적질만 하고 살 생각은 30%정도 밖에 없었음 5 file 문향 2020.05.20 127 0
1065 초간단 js 추첨기 4 하야한아이 2021.04.07 126 4
1064 개좆소 이벤트 추첨기 구상 6 스마일 2020.07.17 126 4
1063 삭제된 게시글입니다. 스마일 2020.06.25 126 0
1062 한글2018 진짜 개씨발좆같이만들었네 8 名取さな 2021.05.10 123 0
1061 최신폰으로 옛날겜돌리기이이이 1 file 나무 2021.04.16 123 0
» 아두이노 공부 fnd 편 4 file 코르캐쉬 2022.05.05 122 6
1059 컴맹이 Java 공부하려하는데 10 file 넨레브 2021.02.23 122 0
1058 오라클 가입오류 유명하네 4 file 저능아 2023.02.07 120 0
1057 그냥 1월 2월달 해서 c언어랑 파이썬 공부하고 9 아야나미레이 2022.01.17 120 0
1056 허접이라 파이썬 하겠음 2 그리드 2021.10.16 120 0
1055 여긴 공기가 다르네 3 file 머스크멜론 2021.04.05 119 0
1054 무료 '해줘' 3 file 노예 2021.06.21 118 0
1053 고인원 신규채용 5 file 그리드 2022.01.17 117 0
1052 유닛테슨트 하면서 개발하는 사람 있? 6 다람쥐 2020.06.19 117 0
1051 와 근데 IT는 뭐 비전공자도 학원 다니면 쉽게 취직하네 ㅋㅋㅋㅋ 2 file MDR 2022.01.20 116 0
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 56 Next
/ 56