const int r_led = 13;
int sw = 2;
void setup()
{
Serial.begin(9600);
pinMode(sw, INPUT);
pinMode(r_led, OUTPUT);
attachInterrupt(0, r_led_off, RISING); // D2 의 신호가 0에서 1이될 때 r_led_off 함수 실행
}
void loop()
{
digitalWrite(r_led, HIGH);
delay(2000);
digitalWrite(r_led, LOW);
delay(2000);
}
void r_led_off() {
digitalWrite(r_led, LOW);
}
동작 영상입니다.
디지털 신호(D13)을 사용해 2초마다 LED를 키고 끄는 프로그램입니다. 여기에 인터럽트를 추가해 버튼을 누르면(D2핀이 0 에서 1이 된다면) r_lod_off함수를 실행시켜 LED를 강제로 끄는 동작을 추가했습니다.
이와같이 인터럽트를 사용하면 프로그램이 delay에 걸려있거나 어느 동작을 실행중이더라도 바로 인터럽트 동작을 수행할 수 있습니다. 인터럽트를 사용하면 작성한 코드 어디서나 추가 동작을 실행시킬 수 있습니다.
아두이노 인터럽트 함수
1. LOW : 핀 값이 LOW일 때 동작. 2. HIGH : 핀 값이 HIGH일 때 동작. 3. CHANGE : 핀 값이 변했을 때 동작. 4. RISING : 핀 값이 LOW에서 HIGH로 변했을 때 동작. 5. FALLING : 핀 값이 HIGH에서 LOW로 변했을 때 동작.
이번 예제에서는 RISING 함수를 사용해 인터럽트핀이 0에서 1이 되는 순간에 인터럽트가 실행되는 기능을 사용했습니다. 각 상황에 맞게 주어진 함수를 적절히 적용하면 원하는 동작을 원활히 만들어 낼 수 있습니다. 시간적 여유가 되신다면 각 함수들을 모두 사용해 인터럽트에 대한 이해도를 높이는것도 좋은 방법입니다.