아두이노 스위치 led 유지 - adu-ino seuwichi led yuji

아두이노

아두이노 강좌 제 5장 "버튼을 누르고나면 LED가 켜지게 만들기,바운싱 현상 제거"

안녕하세요 1인주의자입니다.

지난 3장에서 버튼으로 LED를 켜지고 꺼지게 해보았는데요 이번에는 누르면

 켜진 상태로 유지되고 다시 누르면 꺼진상태로 유지되게 만들어보도록 합겠습니다!

그 전에 버튼의 바운싱 현상에 대해 알아보도록 합시다.

 [책의 영향을 안받고 싶었지만 이번 강좌는 책의 내용을 참조했습니다-책의 출처:(마시모 밴지 지음)]

바운싱 현상이 뭐냐고요? 바운싱 현상이란 우리가 버튼을 누를때 우리에겐 잠깐이지만 아두이노는 엄청나게 많은 작업이 일어납니다.

1초에 16만 횟수의 작업을 하는 아두이노로써는 우리가 버튼을 누르는 순간 계속해서 작업을 하게 됩니다.

조건문을 하나 걸어놓았다면 잠깐 버튼을 누르는 순간 수천 수만번을 조건문을 테스트하는 꼴이 됩니다. 그러면 작업을 제대로 할수가 없겠죠

바운싱 현상의 정의에 대해서는 http://blog.naver.com/mtinet/10010041243 이분의 블로그에서 참조했습니다.

즉 우리가 버튼을 누를때 바운싱 현상이 일어나서 작업에 문제가 생긴다는 겁니다.

이제 본격적으로 만들기를 해봅시다 이번 강좌는 버튼을 누르면 LED가 켜지고 꺼지는게 유지되도록 하는것입니다.

그러니까 한번누르면 계속 켜진 상태인데 다시 누르면 꺼진상태가 유지 된다는 것이죠

지난 강좌에서는 '꾹'하고 누르고 있을때만 켜지고 안누를땐 꺼지도록 만들었었습니다.

준비물:CPU 1개,브레드보드 1개,도선 6개,저항 1개,버튼 1개,LED조명1개

아두이노 스위치 led 유지 - adu-ino seuwichi led yuji

오늘 cpu에서 필요한 부분도 지난 3장과 마찬가지 입니다.

아두이노 스위치 led 유지 - adu-ino seuwichi led yuji

기억이 안나실수도 있지만 지난 3장에서 했듯이 일단 LED조명과 버튼을 설치해보도록 합시다.

http://blog.naver.com/ygs1090/60208856452 [<<제 3장 버튼으로 LED키고 켜기 강좌]

이것만 만들고 컴퓨터 프로그램을 고치기만 하면 되겠습니다^^

[프로그램을 짜보도록 하자]

​설명들을 하나씩 보면서 이해해 보려고 노력하면 금방 이해하실수 있으실겁니다.

최대한 쉽게 설명하려고 했는데 역시 설명은 힘드네요

flag1과 flag2라는 변수가 지금 현재의 상태와 이전의 상태를 나타냄으로서 한번 바뀌면 계속해서 바뀌고 바뀌는 현상을 막아줍니다.

참고로 state = 1 - state;는 스테이트가 0이라면 값이 1-0 = 1이되어 상태가 0에서 1로 반대로 될것이고

1이라면 1-1이 되어 값이 0이되어 상태가 반전이 될 수 있는 것입니다.

​또 digitalRead를 했을땐 BUTTON포트의 꺼진상태는 0이고 켜진상태는 1입니다.

이정도는 알아줘야겠죠?ㅎㅎ

13포트나 7포트에 하기 싫으시면 다른데에 하시면 되고요!

​이와 같이 만드시고 업로드 하시면 아래 동영상과 같이 만들어지는걸 확인하실수 있습니다

잘 안되거나 도통 이해가 안되는 부분이 있으면 질문해주시면 되겠습니다^^

이상으로 마치겠습니다.

처음 아두이노를 혼자 공부할때 버튼 사용하는 것이 정말 쉬운 일 이라고 생각했다.

막상 제대로 버튼 사용하는 방법을 배워보니 생각보다 손이 많이 가는 녀석이었다.

뭘 이리 신경써야 하는 일이 많은지....

버튼을 연결만 한다고 해서 되는 것이 아니라 디바운싱도 해줘야 하고 풀다운이나 풀업 방식으로 저항도 연결해 줘야 하고 버튼 상태를 변경하기 위해서는 적당한 변수도 사용할 수 있어야 했다.

아두이노에서 버튼은 빼놓을 수 없는 부품 중 하나이니 제대로 익히고 넘어가야 한다.

디바운싱이나 풀다운/풀업 저항에 대해서는 다음 기회에 정리해 보기로 하고 오늘은 버튼을 사용할 수 있다는 전제하에 버튼을 이용한 LED 불 켜기를 해보려고 한다.

먼저 이번에 해보려고 하는 내용에 대한 동영상이다.

버튼을 한번 누르면 불이 켜지고 또 다시 누르면 불이 꺼지는 내용이다.

먼저 회로도....

회로도는 그렇게 어렵지 않다.

LED 에는 220Ω 을 (-)쪽에 연결하면 되고, 버튼은 10㏀을 연결했고 풀다운 방식으로 연결했다.

버튼의 입력값은 2번 핀으로 연결했고 LED 입력은 13번 핀에 연결해줬다.

아래에 스케치 코드에 보면 2번과 13번 핀을 전역변수 값을 사용해서 지정해 줬다.

전역변수를 사용하면 이후 코드 수정할 때 유리하므로 될수 있으면 변수를 사용해서 지정해 주는 방법으로 연습하면 좋을 것 같다.

그리고 스케치로 작성된 코드

아두이노 스위치 led 유지 - adu-ino seuwichi led yuji

코드에 대한 주석을 달았다.

코드 중에서 if 를 사용한 토글(상태변환)을 눈여겨 봐야 한다.

변수를 사용해서 버튼이 눌렸다는 상태를 판단한 후 LED에 불을 켜고 다시 버튼이 눌렸다는 상태를 판단하고 LED에 불을 끈다.

이해를 돕기 위해 변수값을 표로 정리해 봤다.

current_Button 변수는 현재 버튼이 눌린 상태인지 아닌지를 판단하는 변수이다.

last_Button 변수는 현재 버튼의 값(current_Button)을 받는 변수이다.

처음 버튼이 눌렸을때는 1값을 갖게 되는데 loop() 함수를 돌면서 값이 '0'으로 바뀌게 된다.

Led_On 변수는 버튼이 눌릴때마다 이전과 반대의 상태를 갖게 되는 변수이다. '0'과 '1'값을 번갈아 가며 갖는다.

그렇게 어려운 코딩은 아닌데 변수의 상태 변화를 이해해야 완성할 수 있다.

버튼 상태를 토글 시키려고 할때는 위의 if 구문을 사용하면 된다.

조금 더 정확한 동작을 시키려면 디바운싱 처리도 해줘야 하는데 그건 다음에 정리하는 걸로... ^^;;;;

아두이노 시뮬레이터 01장 - 아두이노 시뮬레이터 서킷(Circuits) 01-1 아두이노 시뮬레이터의 필요성 01-2 아두이노 시뮬레이터가 필요한 사람 01-3 아두이노 시뮬레이터의 동작환경 02장 - 서킷(Circuits) 개요 02-1 팅커캐드(TinkerCAD) 회원가입 02-2 새로운 디자인 생성하기 02-3 회로 배선하기 02-4 키보드 단축키 사용방법 03장 - 신호와 회로의 기본 원리 03-1 디지털과 아날로그 신호 03-2 회로구성과 기본 원리 04장 - 디지털 출력 04-1 LED(발광다이오드) 04-2 LED 깜박이기 예제 04-3 저항(Resistor) 04-4 브레드보드(Breadboard) 04-5 시리얼(Serial) 모니터 04-6 두 개의 LED 교대로 깜빡이기 05장 - 디지털 입력 05-1 푸시버튼으로 LED 켜고 끄기 05-2 풀업(Pull-up)저항과 풀다운(Pull-down) 저항 05-3 내부 풀업(Pull-up)저항 사용하기 05-4 슬라이드 스위치 사용하기 05-5 푸시버튼을 슬라이드 스위치처럼 사용하기 05-6 PIR 센서로 현관등 만들기 06장 - 아날로그 입력 06-1 가변저항(Potentiometer) 사용하기 06-2 조도센서(Photoresistor) 사용하기 06-3 온도센서(TMP36) 사용하기 07장 - 아날로그 출력 07-1 LED 밝기 제어하기 07-2 삼색(RGB) LED 사용하기 07-3 DC모터 제어하기 08장 - 함수와 라이브러리 08-1 초음파(Ultrasonic) 센서 사용하기 08-2 서보모터(Servo motor) 사용하기 09장 - 액정 디스플레이(LCD) 09-1 액정 디스플레이(LCD) 사용하기 09-2 액정 디스플레이(LCD) 응용하기 10장 - 7세그먼트(Segment) 10-1 7세그먼트 사용하기 10-2 7세그먼트 디코더 사용하기 11장 - 적외선 센서와 리모컨 11-1 적외선 리모컨으로 LED 제어하기 11-2 적외선 리모컨으로 무드등 만들기 12장 - 모터 드라이버 12-1 모터 드라이버로 DC모터 제어하기 12-2 무선조종 2륜 자동차 만들기 13장 - 피에조(Piezo) 스피커 13-1 피에조 스피커 로 음계 표현하기 13-2 피에조 스피커로 전자키보드 만들기