티스토리 뷰

Arduino

[Netduino] LED에 불이 깜빡깜빡!

생각많은 소심남 2012. 7. 29. 23:33

이번 포스트에서는 보드상에 노출되어 있는 스위치를 활용하는 예제입니다. 우선 들어가기 전에 넷두이노한테 받침대를 해줬습니다.



사실 지지대같은게 있으면 좋을텐데 막상 찾으려니까 없더군요. 그래서 고무 빠킹(?) 있는 걸로 지지대역할을 해줬습니다. 아무튼 자칫하면 바닥에 있을지 모르는 전도체를 피하기 위한 예방 수단이니 있으신 분이라면 해주시는게 좋겠지요.

 아무튼 해주고자 하는 것은 버튼을 눌렀을 때 지난 시간에 했던 것처럼 보드상의 LED를 제어하는 겁니다. 그렇기 때문에 입력이 들어왔을 때만 감지해주면 되는거지요. 즉, 모든 구조가 아두이노랑 거의 유사합니다. 차이가 있다면 언어의 차이이겠지요. 자 Netduino Application으로 프로젝트를 하나 생성합니다. 우선은 Output으로 온보드 LED를 사용할 것이니까 먼저 지정을 해줍니다. 


이제 해줄 것은 당연히 스위치를 입력도구로 들어 갈 것이기 때문에 입력 포트에 대한 선언이 필요합니다. 물론 초기상태에 대한 선언도 필요하겠구요.



그런데 입력포트를 집어넣는 값에는 기존 출력포트와는 다른 값을 집어넣게 되어 있습니다. 바로 glitch를 컨트롤 할 수 있는 것과 포트의 저항성분을 어떻게 할것이냐 입니다. 

 회로쪽으로 아시는 분이라면 glitch에 대한 것을 잘 아실 겁니다. 다른 포스트에서도 잠깐 언급했었지만 그냥 간단하게 말하면 잡음 같은 겁니다. 우리가 쓰는 대부분의 전자 신호는 하나의 펄스 형태로 구성되어 있습니다. 모든 전자부품들이 다 그렇겠지만 입력을 깨끗한 값을 받았을 때에 정확한 값을 냅니다. 그런데 간혹 그런 입력에 잡음같은게 낄경우, 혹은 신호를 처리하는 사이에서 알수 없는 요인으로 인해서 출력이 살짝살짝 튀는 값을 나타냅니다.


출처:http://www.ham-radio.com/k6sti/xdr-f1hd.htm


가령 위 사진과 같은 경우에는 정상적인 정현파라면 매끄러운 곡선이 나와야 하지만 위처럼 중간중간 튀는 값이 바로 glitch입니다. 넷두이노상에는 이런 걸 제어할 수 있는 필터가 내장되어 있습니다. 그런데 이번 시간에서는 이런 glitch의 영향을 받는 것이 없기 때문에 해당 기능은 끄도록 하겠습니다. 만약 정밀한 결과물이 필요하다면야 해당 기능을 활성화시키는 것이 좋겠지요.


그 다음으로 나오는 것이 바로 resistor 모드인데 이것도 이전 아두이노상에서는 풀업저항이라는 이름으로 설명을 드렸습니다. 간단히 복습하자면 출력값이 스위치와 LED에 바로 연결되어 있으면 또 알 수 없는 원인에 의해서 갑자기 전체적으로 쇼트가 되는 현상이 발생합니다 ( 그러고 보니까 전자쪽 이야기에는 알 수 없는 원인이 참 많군요...) 쇼트가 된다는 건 말 그대로 전류가 무한정이 되는 상태이므로 이상태에서 LED를 연결하면 LED는 탈겁니다. 이걸 제어하기 위해서 각 포트 출력부에 저항이 하나씩 달려있습니다. 그래서 그것을 활성화시킬지의 여부를 결정할 수 있습니다. 물론 이렇게 풀업을 지정함으로써 정확한 결과를 얻을 수 있기도 합니다. 정확한 내용은 다음 링크를 참고하시기 바랍니다.

http://cpu.kongju.ac.kr/downfile/column/Tnote10.pdf (윤덕용교수님의 마이크로 프로세서)


뭐 아무튼 이번 프로젝트는 그렇게 거창한 것이 아니므로 이것도 끄겠습니다. 그리고 당연히 보드상의 스위치는 눌렀을 때만 동작하는 스위치이므로 초기상태를 끈 상태로 선언해줘야 합니다. 그래서 나온 정의 부분은 다음과 같습니다.



다음으로 해줄 것은 무한 루프를 걸고 버튼의 상태를 읽어와야 합니다. 똑같이 버튼의 속성중에 read라는 매서드가 있습니다.

그다음에 이 buttonstate라는 값을 led 출력포트로 놓아주면 되겠지요. 어차피 LED는 1이 되면 켜지고 0이되면 꺼질 것이기 때문입니다.



자 실행시켜봅시다.


어 그런데 좀 이상합니다. 눌렀는데 꺼지고 원래 상태가 켜져 있습니다. 

사실 지금 이 현상은 넷두이노의 펌웨어 버전이 구버전이어서 나타나는 현상입니다. 따라서 이 현상을 해결해주려면 펌웨어를 업데이트 해주던가 Read 값을 넣는 부분을 반전시켜주면 되겠지요. 

다음 포스트에서 넷두이노를 펌웨어 업데이트 하는 방법을 다뤄보겠습니다.

댓글