[DIY] [더미천국] 아두이노 기초편 1 입니다. (이대로 따라하면 고수된다)
ARDUINO제품을 사용해서
FND counter만드는 예제를 초보에게 맞겼더니 ...
아두이노는 제품화 하는데 쓰는게 아니란 말을 하고 헛소리한다.
그럼3D 프린터 만들어 파는 아나츠의 이동엽 대표는 뭐냐!!
[ 아두이노는 제품화 하여도 좋은 성능을 가졌습니다. ]
그래서 아두이노로 제품 만드는 정도까지..할수있다고 윽박지르고
제품으로 만드는정도 까지 실력을 높여 주기로 하였다.
일단 스위치 입력
Switch Chattering (Bounce)방지기능첨가하고 뭐 이러랬더니 결과가 엉망이다.
영 프로그램도 맘에 안들고 해서 붙잡아 놓고 첨부터 개발 과정과 전략을 소개했다.
그 복잡한거 다 빼고 뼈다귀와 소개하기 쉽게 큰 프로젝트의
아주 조금 일부분을 떼어 여기로 가지고 왔다.
[개발 목표 규격]
1. Arduino Uno보드로 FND[7 segmwnt ]1개 켜기
2. Switch 2개로 UP/down기능 실현
3. Up은 0,1,2.. 9로 증가시키고 9이상은 증가 안함..
4. Down은 9,8,7..0으로 다은되며 0에서 더 내려가지 않음
[개발하는 보드의 하드웨어/Schematic]
<회로도 사진>
FND 연결 port
FND 연결 |
Arduino Pin |
Switch PIN |
Arduino Pin |
a |
D 13 |
Up Switch |
D 3 |
b |
D 12 |
Down Switch |
D 2 |
c |
D 11 |
|
|
d |
D 10 |
|
|
e |
D 9 |
|
|
f |
D 8 |
|
|
g |
D 7 |
|
|
dp |
D 6 |
|
|
[개발 순서]
이런 회로 개발하라면 다짜고짜 회로와 펌웨개발하는 넘이 많다.
전체 프로그램 작성하고 며칠 밤을 센다. 그래서 남이 보기에
엄청 열씨미 프로그램하는 불쌍한 3-D업종에 근무하는 ..
그래서 초보자에게 프로그램 방법을 5가지 스텝으로 잘라
하드웨어 소프트웨어를 차례로 만들게 하였다. 오늘은 step 1
1. step1 - 회로도를 보고 빵판에 회로 실장하기
2. Step2 - 일단 스위치 신호를 제대로 읽는 프로그램 작성하는게 제일 중요하다.
별도로 Timer 1 의 라이브러리 <TimerOne.h>을 추가하시길..
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 64 | // 전자공작 : http://cafe.naver.com/circuitsmanual // Date Time : 2019-12-16 오전 10:41:59 // by Soo-yeub Yoo //============================================== #include <TimerOne.h> /*7segmet Test by Shifting fix SegmentsPins to fit for your Hardware */ //const int SegmentPins[8] ={13,12,11,10,9,8,7,6}; const int SegmentPins[8] ={12,11,7,9,10,13,8,6}; const int UpKey =3; const int DnKey =2; volatile boolean DnFlag=0; volatile boolean UpFlag=0; volatile byte CountUp=0; volatile byte CountDn=0; // the setup function runs once when you press reset // or power the board void setup(){ // initialize digital PIN 13~7 as an output.? for(int i=0; i<8; i++) { pinMode(SegmentPins[i],OUTPUT);// set each segment Pins as Output } // Pin 2 3 as Switch Input pinMode(UpKey,INPUT); pinMode(DnKey,INPUT); // Interrupt seting By Timer 1? Timer1.initialize(5000); // 5 mSec IRQ?Timer1.attachInterrupt(timerISR); Serial.begin(9600); pinMode(5,OUTPUT); //test } // the loop function runs over and over again forevervoid loop(){ digitalWrite(SegmentPins[3],UpFlag); digitalWrite(SegmentPins[0],DnFlag); //DnFlag=?digitalRead(DnKey); Serial.println(DnFlag); } // void timerISR(){ boolean inputU=1; byte inputD=1; inputD= digitalRead(DnKey); inputU= digitalRead(UpKey); //if(digitalRead(UpKey)==0) if(inputU==0){ CountUp++; if(CountUp==4)UpFlag=1; if(CountUp>5)CountUp=5; } else{ CountUp=0; UpFlag=0; } if(inputD==0){ CountDn++; if(CountDn==4)DnFlag=1; if(CountDn>5)CountDn=5; } else{ CountDn=0; DnFlag=0; } } // Nice to meet you! |