DynamicRC 광팬 커뮤니티에 오신 것을 환영합니다!
DynamicRC 광팬 커뮤니티

게시판 통합검색 help
subject/ name/ content/ comment

공지사항 자유게시판 QnA 제작일지 비행일지
RC전자공작 MCU STUDY IR·RF 자료실 Link 옛날 프로젝트룸

* *

 버튼입력 프로그램소스좀 구할수 있을까요?

2012-06-01 09:23:53, Hit : 4124

작성자 : 이학종

mcu를 하다보면 버튼입력 받는건 그야말로 기본중의 기본일수 있겠는데요.
잘 된 소스좀 어디 없을까요?

기능은
1.채터링 방지
2.클릭, 더블클릭, 롱클릭 판단

버튼 2개로 up/down 하려고 하는데요.
up버튼시
클릭 : 1증가
더블클릭 : 2배증가
롱클릭 : 최초1증가후 적당한 함수를 정하여 쭈-----우-------웈 증가하게 하려고 합니다.

이런게 많이 있을법 한데요.




김영일
저라도 이런 고민을 하게 된다면 차라리 직접 구현하는 쪽을 선택할 것 같습니다.
왜냐면, 남의 소스는 어떤 타이머를 어떤 방식으로 어떻게 처리하느냐에 따라 리소스를 양보해야
하는데, 내가 쓰는 디바이스에서는 지원하지 않는 리소스라든지, 내가 이미 쓰고 있는 것일 수도
있고요, 자신은 코드를 이벤트 처리방식으로 하지 않는데, 남의 소스는 이벤트처리방식을
고수한다든지 하여 매칭시키다보면 그 작업이 더 큰 부하가 되는거거든요.
아두이노는 잘은 모르지만, 리소스를 사용자가 선택할 필요 없이 코드 재사용이 가능하리라고
봅니다. 선택요소가 있다고 하더라도 극히일부 요소일꺼라고 생각합니다.
이미 맘 정하시고 코딩에 들어가셨는지도 모르겠네요.
2012-06-01
23:35:32

수정 삭제
아직도
잘된 쏘스는 잘 모르겠네요...
제가 차에서 PC 로 네비게이션 쓰면서 리모컨(유선) 7버튼을 쓰는데 이게 엄청 많은 단추처럼 작동하게 하는 방법입니다.
뭐 신뢰성은 괜찮은데 비주얼베이직으로 PC 프로그램인데 뭐 원리는 같습니다.
이런식으로 0.05 초 단위로 시간을 세면 채터링도 걸러지고 각각의 목적을 달성할 수 있습니다.
0.05초 안의 변화는 무시(채터방지), 0.3초 안에 다시 눌리면 더블클릭, 0.6초 이상 누르면 클릭홀드 를 판별하게 하는데...
비베에서는 그럭저럭 작동하는데, MCU 에서 C로 맹근 건 너무 살이 많이 붙어 있어서 못드리겠네요... 히히히

간단히는 이런 식입니다.

if(~PINB&_BV(PB0)){
for(c=0;c<12;c++){ //0.6sec
_delay_ms(50); //under 0.05s signal is chatter
if(PINC&_BV(PB0)) break;
}
if(c==12){ //not release for 1 sec
for(c=0;c<15;c++){
if(PINC&_BV(PB0)) break;
//Click & Hold
_delay_ms(500); //every 0.5s event
}
}else if(c){//discard chatter ones more
for(c=0;c<6;c++){ //0.3s
_delay_ms(50)
if(~PINC&_BV(PB0)){
// Double Click
break;
}
}
if(c==6){
// single click
}
}
}

위 코드는 버튼이 모자라서 단추한개로 여러개의 효과로 쓰고자 Mega8에 쓰던 실제 코드를 살을 일일이 지우고 옮겨 쓴거라
오류가 있을지도 모르겠습니다.
2012-06-02
09:23:56

수정  

tiny10 pwm2ppm 컨버터 [7]

Copyright 1999-2017 Zeroboard / skin by 또미
Copyright 2003-2010 DYNAMICRC.COM All rights reserved