티스토리 뷰

Button을 이용해서 LED 제어하기!!!!!!!!!!!!!!!!!



저번에는 그냥 LED를 깜빡거리기를 해봤으니 이번에는 버튼을 누를때마다 LED가 켜지고 꺼지게 해보았다.


까짓거 개껌이지 하고 시작했다가


다 안다고 무시했던 풀업과 풀다운 때문에 시간을 엄청 날렸다ㅠㅠㅋㅋㅋㅋㅋㅋㅋㅋㅋ


그러므로, 먼저 풀업과 풀다운에 대한 간단한 설명!



풀업과 풀다운은 일단 반대되는 개념이다.



예를 들어 어떤 스위치를 생각한다면,


풀업 에서는


스위치를 눌렀을때, 스위치가 ON 되었을때 스위치에 0V가 걸리고 0의 값을 가지게 되고


스위치를 누르지 않았을때, 스위치가 OFF 되어있을때 스위치에 5V가 걸리게 되어 1의 값을 가지게 된다.


풀다운 에서는


스위치를 눌렀을때, 스위치가 ON 되었을때 스위치는 1의 값을 가지게 되고


스위치를 누르지 않았을때, 스위치가 OFF 되어 있을 때 스위치에 5V가 걸리게 되어 1의 값을 가지게 된다.



표로 나타내면,


풀업(PULL UP)

풀다운(PULL DOWN)

 ON

 LOW(0)

 ON

 HIGH(1)

 OFF

 HIGH(1)

 OFF

 LOW(0)


과 같이 나타낼 수 있다.




두 방법의 차이는 저항을 어디 연결하느냐에 따라 달라지는데,



그것도 모르고 왜 LED가 반대로 동작하냐며 코드를 몇번이나 뜯어보고 삽질한건 비밀....ㅎㅎㅎ




풀업은 저항을 Vcc, 입력전압에 연결해줌으로써 설정이 가능하고,


풀다운은 저항을 GND에 연결해줌으로써 설정이 가능하다.



저항을 Vcc에 달아놓고 왜 스위치를 눌렀는데 HIGH가 안되냐며....ㅎㅎ


고민했던 내 아까운 시간.....ㅎㅎㅎ


이렇게 배우는거지 뭐 하하




일단 회로 구성은,


1. 풀업



와 같이, 저항을 스위치와 Vcc사이에 연결해주면 된다. 


이렇게 연결이 되면 버튼을 눌렀을때 DigitalRead 함수는 LOW를 리턴한다.


그 외에 지난번에도 말했다시피 LED에도 항상 저항을 달아주어야 하고, (+) (-) 구분을 잘 해 주어야 한다.


그리고 LED는 12번, 버튼은 6번 핀에 연결하였다.



2. 풀다운



나머지 모든것은 풀업과 똑같이 연결하되, 저항을 GND와 버튼 사이에 연결해준다.


이렇게 연결이 되면 DigitalRead 함수는 버튼을 눌렀을때 HIGH 값을 리턴한다.



코드는 아래와 같이 작성할 수 있다.





회로 연결과 마찬가지로 버튼은 6번, LED는 12번으로 선언해주었다.



풀업저항을 연결했으므로 Button이 눌려졌음을 체크하기 위해서 DigitalWrite(BUTTON) == LOW가 되어야 한다.


만약 풀다운저항으로 회로를 연결했다면 LOW를 HIGH로 바꾸어주면 된다.



버튼을 한번 누를때마다 켜고 꺼지고를 반복하기 위해 flag 변수를 두어서 구현했다.


버튼이 눌려졌을때 flag가 0이면 LED를 켜고 flag를 1로 만들고,


버튼이 눌려졌을때 flag가 1이면 LED를 끄고 flag를 0으로 만들었다.




마지막 while문은 버튼이 눌러져있는동안 LED가 깜빡깜빡거리지 않도록 while문안에 묶여있게 하려고 넣은것이다.


사실 while문을 안넣어도 동작은 동일하다.


그러나 while문이 없을때 버튼을 꾹 누르고 있으면 미세하게 LED가 깜빡거리는 것이 보인다.


그러니까...뭐 만약 프로젝트를 하게 된다면 넣어주는게 좋지않을까.


넣어주지 않는다면 값이 과도하게 많이 들어가게 될 수도 있다.



위의 코드와 회로로 실행 시켜보았을때,



위와 같이 동작한다.



그리고 여기서 또 문제점 발견...^^


버튼의 입력을 한번으로 받지 못한다.


물론 한번의 입력으로 받는 경우도 있지만, 


버튼을 분명 한번 놓았다 뗐는데도 두번의 입력을 받는 거 같았다.



내 손이 정확하게 한번만 누르지 못하는게 문제일수도 있지만.. 


아무리 그래도 2번 이상으로 입력받는 빈도가 높아서... 



이건 작년 하드웨어 실험할때도 끊임없이 나를 괴롭혔던건데...아직도 괴롭...ㅎ...




혹시 방법이 없을까


아니면 아예 버튼을 다른걸 써야하나 하는 생각이다.


작년에도 몰랐는데 아직도 모르네...^^





풀업 풀다운만 아니었으면 오늘 블루투스 모듈까지 손대고 싶었는데 실패했다..ㅠㅠ



뭔가 살때는 이것저것 많이산줄 알았는데 막상 뭐 해볼려니 버튼이랑 LED가 다다.


스텝모터나 DC모터나...아니면 둘다나... 구매해볼 생각이다



다음번엔 모터가 있다면 모터를 좀 가지고 놀던지,


아니면 블루투스모듈을 사용해서 안드로이드 앱으로 LED 켜고 끄기 를 해봐야지



아무래도 블루투스는 앱도 만들어야하니까....모터를 얼른 구매해야겠다

댓글