2015년 4월 19일 일요일

아두이노 터치센서를 이용한 인터럽트 실험

 이번에는 터치 센서를 한 번 터치하면 LED가 켜지고 다시 터치하면 LED가 꺼지도록 동작하는프로그램을 작성하도록 하겠다. 여러 방법이 있겠지만 인터럽트(interrupt)를 이용하는 것이 가장 일반적이다.

 다음 프로그램은 우노의 11번 핀에 부저가 달렸고 3번 핀에 터치센서가 달렸다고 가정하고 작성한 예제이다.

#define TS 3
#define BUZ 11
void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
   pinMode(BUZ, OUTPUT);
   pinMode(TS, INPUT);
   attachInterrupt(INT1, toggleLed, RISING);
}
void loop() {
   digitalWrite(BUZ, HIGH);
   delay(50);
   digitalWrite(BUZ, LOW);
   delay(450);
}
void toggleLed() {
   digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN) );
}

 setup()함수에서 attachInterrupt(INT1, toggleLed, RISING) 를 수행하여 INT1 핀(3번 핀)에 toggleLed()함수를 붙였다. 이 ISR 함수는 rising edge 에서 호출된다.

 그리고 loop() 함수에서는 부저를 0.5초마다 한 번씩 울리는 일 외에는 하지 않는다. 터치센서의 값을 읽는 코드는 어디에도 없다는 것에 주목해야 한다. 터치 센서의 출력값이 0에서 1로 변하는 순간 함수 toggleLed()가 (하드웨어적으로) 자동으로 호출된다. 그러면 main()함수에서 빠져나와서 toggleLed()함수를 수행한 후 다시 돌아와서 계속 수행하게 된다.


댓글 없음:

댓글 쓰기