jHWkRD7U-JMY1ZsyMYcpRynAc025IiHAaXuuRNuwyo0ksSkY6zxs8kzriniUO5TDBbIo0yPFIEtOjhvtWO8iXn-ZTGBVtN1g_wHgSwqyxcU4Jin3gpk 입니다.
바로 강의 시작하도록 하죠~

오늘의 핵심 Keyword는 Digital Input입니다.
지난 시간에 Digital Output을 해봤으니 오늘은 Digital Input을 해보도록 하죠~
Blinking LED에서 배운 내용을 조금만 응용하면 됩니다 ^^


위의 동영상에 나오는 것 처럼
Switch로 부터 신호를 입력 받아 스위치를 한번 누르면 LED가 켜지고, 한번 더 누르면 LED가 꺼지는 녀석을 만들어 봅시다 
이번 강의 준비물은 지난시간 Blinking LED 구성품에서 스위치(Switch)와 10kΩ 짜리 저항만 추가되면 됩니다.
Breadboard에 아래와 같이 회로를 꾸며주시구요 (회로를 꾸미시고 나서 스위치를 누르지 마세요!!)
U_Bmr5-CwLg2ZfB42RqUbMmZEqdv1si3ONdo_nqt-wsvGdlGLIpjyGzsIHWqZSzmGUiIUXfMq2kcy14NnuG5WvdB2a389OjXzAkmnWSfINf44UuvYHg
잠시 Switch에 대해서 설명하겠습니다.
스위치에도 여러가지 종류가 있지만 오늘 강의에 쓰일 Switch는 Tactile Switch입니다.
스위치를 누르면 회로가 연결이 되구요 스위치를 누르지 않으면 회로가 Open 됩니다.

AOs0qZgCMKvReuvqUKI7SthTMCBc7YXk-xvUAeKwD1BLI8vsse601A__xMRtG_Q-4cfHAaWRn5V-VUJixWUQwclKpb2O_aNSpQaXVEWRhMC-SGrjvdQ

그런데 택(tactile) 스위치를 실제로 보면 이게 또 헷갈리게 생겼다 이거죠 -_-;;
다리가 2개만 있으면 확실 한건데 다리가 4개가 있습니다.
LVJOTo2-rrZ-ixjd0kmxhzdLmD3CRZREZ18MyWhBMzRLjUdDurzAclQ_K-mniChccJHl28N8I18Ug7flYqjmdPVpITkLNSzG6IYBIl2KSfSm_53Nf9E

매우 헷갈리게 마주보고 있는 녀석 끼리 연결이 되어 있습니다. (위의 그림을 잘 보세요)
Breadboard에서 Switch를 어떻게 연결했는지 이해가시죠?

위의 회로대로라면 스위치를 누르지 않으면 Pin5에서 읽어 들이는 값은 0이 될꺼구요
스위치를 누르면 Pin5에서 읽어 들이는 값은 1이 될껍니다. (5V에 연결해 놓았으니까)

MATLAB code를 보겠습니다. (VIP 게시판에 실행 코드를 첨부해두었 습니다)
Q7Ob15o8z57EsMTvLDAHPNYgi0UZXNxruVMpOS-4J29JzviETcaVes-c2yxp1JOl_ZNep0ptYmQrRZFDNDHYFQQ99D4UVtQHHZSbDKSfRsSmp-oGBNo

우선 a = arduino('COM3') 하셔서 MATLAB과 Arduino를 연결해두시고요

pinMode 메소드(method) 사용법 기억나시나요?
a.pinMode(핀 넘버,'모드') 였죠? 지난번 강의에서는 mode가 'output'이었는데 이 'output'부분을 'input' 으로 바꾸면
지정한 핀이 출력을 하는 output pin이 아니라 입력을 받아들이는 input 핀이 됩니다. 간단하죠? ^^
"디지털" Input 이므로 input pin이 돌려주는 결과 값은 0과 1 둘중에 하나입니다.
(참고로 Analog Input Pin은 0~1023 사이의 값을 돌려 줍니다)

만약 Digital 5번 핀을 Input으로 설정하고 싶으시다면
a.pinMode(5,'input')이라고 하면 되겠죠?

Output Pin에 값을 쓰시려면 digitalWrite method 쓰셨잖아요~
Input Pin에서 값을 읽으시려면 digitalRead 메소드를 쓰시면 됩니다 ^^
코드의 나머지 부분은 이해하시는데 문제 없으실 겁니다. 

자~ 실행을 시켜보시면? 어떻게 될것 같습니까?
스위치를 누르기 전에는 LED가 꺼져 있어야 겠죠? ^^ (아직 스위치를 누르지 마세요!!)
MATLAB에서 code를 실행!! 시키시면 으잉!! ヽ( ̄д ̄;)ノ=3=3=3 LED가 무작위로 마구 깜빡입니다 ;;; 냠~
우리가 작성한 MATLAB 코드에 문제가 있는 것은 아니구요

스위치가 열려 있을 때 5번 핀은 그냥 공중(허공)에 둥둥 떠있죠(floating)?
즉 5번 Pin이 확실하게 Ground(0V)나 5V에 연결된 것이 아니라 그 끝이 그냥 공기 중에 있어요~
그래서 주위의 미세한 전기장 변화만으로도 값이 마구 왔다갔다 합니다. 이런 현상을 floating 현상이라고 해요.
다시 말해 Floating 현상을 없에 주시려면 확실히 Ground나 5V에 Pin을 연결 해줘야 한다!!는 거죠~

그럼 지금부터 매우매우 헷갈려 하시는  Pull Up(풀업) 저항과 Pull Down(풀 다운) 저항을 설명하겠습니다.
우선 Input Pin 내부에는 무지무지무지 큰 저항이 있다고 생각하시면 이해하시는데 편합니다.
(실제로는 좀 다르지만 큰 저항이 있다고 생각하셔도 문제 없습니다^^)

Pull  Up부터 살펴보면

zLxgHW9IFJgFjLLjgNm3dM1z29yI-KmMD9pnPQ4IU3zcX7m_arIbMqrawImLOAcADJRHM9PsO-vR_X0mlWkVnaHwrOgT9ewSdkXcEZ8Nnnx8YUZos48

스위치가 열려 있을 때 굳이 Node Analysis를 하지 않으셔도 딱 봐도 Pin5 Node의 Voltage가 거의 5V에 가깝다는걸 아실 수 있습니다.
즉 Pull Up 회로를 꾸미면 스위치를 누르지 않았을 때 Input Pin에 5V(Active)의 전압이 걸리는 거죠~
반대로 Switch를 닫으면 Pin5 Node는 Ground(0V)와 바로 연결되어 있으므로 전압은 0V(OFF)가 됩니다.
이해가시죠? 
Pull Up이 우리나라 말로 바꾸면 '위로 끌어 올린다' 인데 
Pull Up 회로의 경우 전압을 끌어 올려 (Switch가 열려 있을 때) 기본값으로 5V를 인가해주고 있네요

Pull Down은 Pull Up과 반대겠죠?

mkbu0kSfaAkGHDc_1WNRo3k8ezUUTqm0UOuJOLFli3J3uV33XE4am4brMA0dbYwPd-hNAiMmN8We_4if4JsVeIrsDtA4ZgzXKG_EakhsEKxXhQuJAxo

즉 Pull Down 저항을 달게 되면 스위치가 눌러지면 Input Pin에 5V가 걸리고요
스위치가 눌러지지 않으면(열려있으면) Input Pin에 0V가 걸리는 구조로 되어있습니다.

표로 정리하면 아래처럼 됩니다.

pqtAtoxHa9VG9-afP7N09EVEc7XWp6XE-jIrYZtrOVidSZDs2fhb6wzdl-1q4OYRv4I5pigK7Gse_GLhOCcI-qKQ9UhlJmNOZvVbyTADf9GxgFGP4bA

Pull Up이나 Pull Down 저항은 10kΩ 정도가 적당합니다. ^^
(위의 경우 만약 Pull Up 회로에서 Pull Up 저항이 내부저항보다 크면 Node Voltage 값이 2.5V 이하가 될겁니다 -_-;;)

저는 직관적으로 이해하기 쉬은 Full Down 회로로 꾸몄습니다. 최종적인 회로도는... 짠~
이제 잘 되시나요? 헤헤~
9mrtF18XwR67-gU_K_Vpr4U09GKjbbukgXuGmrqWLWOPSr5NS_aAqB475EJ-vFVB7_qTz7f-0EiWG4L5oqi__j8vufRClW76SLWMYkzaPcJAafCtN9w



다음 강좌에서는 Analog Input에 대해서 알아보겠습니다.
아마 다음시간에 MATLAB의 진가를 느끼실 수 있을 겁니다. o(^o^)o
(figure 창에서 실시간으로 Input 값을 그래프로 볼 예정~)
그럼 다음 시간에... 총총