로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Arduino Open Source
아듀이노 함수의 상세설명
작성자 avrtools™        
작성일 2008/08/11
Link#1 (Down:259)
ㆍ추천: 0  ㆍ조회: 4105   
  아듀이노 터치스위치
제목 : Native Capacitive Sensors without additional Hardware
참조 사이트 :
http://www.arduino.cc/playground/Code/CapacitiveSensor
 
Sensor key는 디지털 포트 8 ~ 13 을 이용하여 어떻게 터치스위치를 감지하는지 보여준다.
지면과 접촉된 신체의 정전용량을, 입력포트에서 인체접촉시 정전용량의 변화를 검출한다.
  

이것은 어떤 특별한 하드웨어도 필요하지 않다. 접촉용 전극으로 사용할 짧은 전선이 필요하다.
그럼에도 불구하고, 접촉전선으로 들어오는 50~60 Hz의 잡음을 제거하기 위해서는,
터치 전극과  병렬로 1nF (0.001uF)의 정전용량을 연결하는 것을 추천한다. (전선이 긴 경우에 좋다)
 
제작방법 :
짧은 전선을 디지털 포트 8~13 중에서 필요한 만큼 선택하여 아래와 같이 연결한다.
 
 
터치스위치용 전용 IC를 사용하지 않아도, 전극을 터치하면 디지털 입력포트로 사용할 수 있다.
프로그램만으로 포트에 연결된 정전용량을 완전방전 후에 충전시간으로 비교한다.
 
예를 들면 포트핀의 충전시간 검출값이 1 이었다면, 터치하면 약 5 로 올라간다.
키 입력의 검출에서 논리적인 문턱(threshhold)을 만드는 방법을 사용할 수 도 있다.
주의 검출 핀에는 어떤 하드웨어 구동부품이라도 연결하지 마십시요.
소프트웨어에서 검출 핀을 출력으로 전환하여 포트의 정전용량을 방전합니다. 
 
무접점 터치 스위치 소스
// 저자 : Mario Becker, Fraunhofer IGD, 2007
// 사이트 : http://www.igd.fhg.de/igd-a4
// 제목 : sensor key
#define KEYPORT PORTB // PORTB(포트B의 출력)를 KEYPORT로 이름을 변경
#define KEYDDR DDRB // PORTB의 DDR(포트B의 방향)을 KEYDDR로 이름을 변경
#define KEYPIN PINB // PINB(포트B의 입력)의 이름을 KEYPIN으로 변경
#define KEY0 PB0 // PB0 즉 어듀이노의 D8을 KEY0로 이름을 변경
#define KEY1 PB1 // PB1 즉 어듀이노의 D9을 KEY1로 이름을 변경
#define KEY2 PB2 // PB2 즉 어듀이노의 D10을 KEY2로 이름을 변경
#define KEY3 PB3 // PB3 즉 어듀이노의 D11을 KEY3로 이름을 변경
#define KEY4 PB4 // PB4 즉 어듀이노의 D12를을 KEY4로 이름을 변경
#define KEY5 PB5 // PB5 즉 어듀이노의 D13을 KEY5로 이름을 변경
 
void setup()           // 리셋후 기판의 준비작업
{
 Serial.begin(9600); // 직렬포트의 속도를 9600 bps로 설정
 }
 
// 실행결과인 입력핀의 정전용량 값을 가지고 나간다, 이 값은 함수를 부르는 명령구문의 값으로 대치된다.
// y = getcap(x); 라고 이함수를 호출하면, x 핀의 정전용량값을 함수에서 직접 받아 변수 y에 저장한다.
// 핀은 반드시 비트 마스크를 한다, 예 1<
char getcap(char pin) // 이함수는 이름이 getcap이며, 이 함수에 들어오는 값은 1바이트 변수 pin 이다,
{                              // 나가는 변수는 char(1바이트)이며, 이름은 필요없다.
 char i = 0; // 1 바이트 지역변수 i를 0으로 설정 (함수 안에서 선언하는 변수는 지역변수이다)
 KEYDDR &= ~pin;     // pin값에 해당하는 입력포트를 읽어서, 반전하고(~), KEYDDR과 논리적연산(&)을 한다 .
 KEYPORT |= pin;     // pin 값에 해당하는 출력포트에 HIGH를 출력한다.
 
 for(i = 0; i < 16; i++)  // 카운터를 0에서 15까지 증가시킨다.(아무일도 안한다 = 짧은 지연)
 if( (KEYPIN & pin) ) break; // 만일 해당 입력핀이 HIGH라면 실행을 여기서 종료한다(break) .
 KEYPORT &= ~pin;  // 해당 출력포트를 LOW로 만든다.
 KEYDDR |= pin;       // 해당 포트의 방향을 1로 변경한다, (해당 포트의 값을 읽었으므로 출력으로 전환)
 return i;                  // 변수 i를 직접 가지고 나간다.
}
 
void loop () // 무한반복 함수의 시작을 선언
{
 char capval[6];                       // 1바이트 지역변수 capval (정전용량 값) 6개를 선언 (순서대로 배열된 변수)
 char pinval[6] = {1<<<<<<       // 1바이트 지역변수 pinval (입력 값) 6개를 선언하고, 1을 6개 저장
 delay(1000);                            // 1000 ms 즉 1초를 대기한다 (내장된 함수 delay를 부른다)
 for(char i = 0; i < 6; i++)            // 반복 카운터를 i로 설정하고, 0~5 까지 바꾸어 가면서 { } 안의 명령들을 반복 실행한다
 {
   capval[i] = getcap(pinval[i]); // getcap()함수에 포트번호 i를 넣고, 읽은 정전용량값을 capval 배열변수 i번에 저장
   Serial.print("digital ");             // 직렬통신포트로 문자열 digital을 송신한다
 
   // 포트B의 번호에 8을 더하면 어듀이노의 디지털포트 번호가 만들어 진다,
   // 즉 PB0~5 를 D8~D13 으로 만드는 것이다.
   Serial.print(i+8, DEC);             // 직렬통신포트로 포트번호 i 에 8을 더해서 십진으로 표시되는 값을 송신한다
   Serial.print(": ");                     // 직렬통신포트로 콜론(: ) 문자를 송신한다
   Serial.println(capval[i], DEC); // 직렬통신 포트로 포트 i에서 읽어낸 정전용량값을 십진으로 표시되는 값을 송신한다.
 } // 다음 포트 번호를 처리하러 for 구문의 반복 시작으로 간다.
 
Serial.println("");                       // 반복구문 for의 실행이 끝나면 줄바꾸기(CR)을 송신한다.
} // 무한반복의 처음 시작으로 돌아간다 = 포트번호를 0 부터 다시 시작한다 

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
 
 AVRTOOLS™
   
이름아이콘 블랙홀
2011-03-01 04:50
char pinval[6] = {1<<<<<<       // 1바이트 지역변수 pinval (입력 값) 6개를 선언하고, 1을 6개 저장
이 부분 이상한되요. 괄호 닫는것도 없고 세미콜론도 없고 에러남
   
이름아이콘 블랙홀
2011-03-01 05:08
char pinval[6] = {1,1,1,1,1,1,};
????
   
이름아이콘 avrtools™
2011-09-12 12:52
게시판이 이상한 문자열이 들어가면 오류가 납니다,,, ^^;
아래 소스를 참조 하세요, 참조사이트에도 소스가 있습니다.
void loop ()
{
 char capval[6];
 char pinval[6] = {1<<KEY0,1<<KEY1,1<<KEY2,1<<KEY3,1<<KEY4,1<<KEY5};
 delay(1000);
 for(char i = 0; i < 6; i++)
 {
   capval[i] = getcap(pinval[i]);
   Serial.print("digital ");
   Serial.print(i+8, DEC);
   Serial.print(": ");
   Serial.println(capval[i], DEC);
 }
 Serial.println("");
}
   
 
  0
9999
윗글 소프트웨어 Serial 함수
아래글 아듀이노 shiftOut
    N         제목    글쓴이 작성일 조회 추천
판매상품의 사용설명서는 다른 자료실에,,, avrtools™ 2011/08/30 (화) 1461 0
23 LCD 문자표시 (신형) avrtools™ 2012/04/12 (목) 2102 0
22 아듀이노 멜로디 연주 avrtools™ 2008/08/22 (금) 3454 0
21 아듀이노 4비트 LCD (구형) avrtools™ 2008/09/02 (화) 4302 0
20 아듀이노 가변저항 avrtools™ 2008/08/26 (화) 3073 0
19 직렬 데이터 이동(shift) 출력 avrtools™ 2012/04/10 (화) 1712 0
18 디지털 신호의 펄스폭을 측정하는 함수 avrtools™ 2012/04/10 (화) 1973 0
17 EEPROM 읽기, 쓰기 함수 avrtools™ 2012/04/10 (화) 2281 0
16 변수의 크기 avrtools™ 2012/04/10 (화) 1613 0
15 플레시 메모리에 상수를 저장하고 읽는 함수 avrtools™ 2012/04/10 (화) 1897 0
14 소프트웨어 Serial 함수 avrtools™ 2012/04/10 (화) 1793 0
13 아듀이노 터치스위치 [3] avrtools™ 2008/08/11 (월) 4105 0
12 아듀이노 shiftOut avrtools™ 2008/09/10 (수) 3364 0
11 아듀이노 스위치와 LED점등 avrtools™ 2008/08/13 (수) 4635 0
10 아듀이노의 주파수 출력 함수 avrtools™ 2009/10/20 (화) 2737 0
9 One Button Switch Library avrtools™ 2012/03/09 (금) 1841 0
8 아듀이노 논리연산 avrtools™ 2008/08/26 (화) 3005 0
7 아듀이노 PS2 키보드 읽기 avrtools™ 2008/09/10 (수) 4072 0
6 아듀이노 가로채기 함수 avrtools™ 2008/08/23 (토) 3185 0
5 아듀이노 전용명령 avrtools™ 2008/09/16 (화) 3914 0
4 아듀이노 PWM 출력과 타이머1 전용명령 avrtools™ 2008/08/19 (화) 3562 0
3 8비트 포트의 단일비트 조작방법 avrtools™ 2010/10/30 (토) 2365 0
2 직렬포트에서 문자를 받아 숫자 int로 저장 avrtools™ 2012/04/08 (일) 1682 0
1 직렬통신포트의 초기화 avrtools™ 2012/04/06 (금) 1468 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0