728x90
반응형

아두이노에서 Interrupt 기능을 이용하여 돌발 상황이 발생할 때 중간에 개입되어 실행되는 것을 구성한다.

인터럽트는 현재 프로그램이 수행 도중에 어떠한 돌발 상황이 발생되면 수행 중인 프로그램을 일시 중단 시키고

돌발 상황에 대한 특정 동작을 수행하게끔 하도록 하는 것이 인터럽트라고 생각하면 된다.

 

예를 들어, 요리사가 요리를 만들어 A라는 사람에게 대접하고 A는 대접받은 요리를 맛있게 먹는다.

 

- 인터럽트 발생: 갑자기 B라는 사람이 왔다.

- 특정 동작 수행: 요리사는 숟가락 하나를 B에게 건네어 A와 같이 먹도록 하게 한다.

- A는 계속 요리를 먹고, B 또한 숟가락을 받은 뒤 A와 요리를 먹는다.

 

loop() 함수에서 아두이노는 기본 동작을 반복 수행한다.

그 동작을 반복할 때 예기치 못한 상황이 발생하면 그 문제를 해결하기 위한 처리 동작이 필요하다.

그래서 인터럽트 함수를 사용하게 되는 것이다.

 

아두이노 2번과 3번 핀은 Interrupt Pin 이고 아두이노 종류에 따라 사용되는 핀의 갯수와 핀 번호가 각각 다르다.

 

> 코드 형식:

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); //Recommend
attachInterrupt(interrupt, ISR, mode);
attachInterrupt(pin, ISR, mode);

 세가지 방법이 있으나, 첫번째 함수를 권장한다.

 

attachInterrupt(인터럽트핀, 호출함수, 상태조건)으로 해서

setup() 함수에 선언하기만 하면 알아서 인터럽트가 발생하면 호출 된다.

동작은 해당 인터럽트핀이 특정 상태조건이 되면 호출 함수가 호출된다.

 

상태 조건은:

LOW: LOW 상태일때

HIGH: HIGH 상태일때

CHANGE: 입력값이 변할때

RISING: LOW -> HIGH로 변할 때

FALLING: HIGH -> LOW로 변할 때

 

내부 풀업 저항을 사용하는 스위치 버튼이 초기 상태값이 HIGH 이고 스위치를 누르면 LOW가 된다.

고로 스위치를 누르는 순간 HIGH->LOW로 FALLING 상태가 되는 것이다.

인터럽트핀 2번과 3번 핀에 FALLING 상태가 되면 exchage() 함수가 호출되는 것이 기본 동작이다.

여기서 exchange라는 단어는 임의의 함수명이기 때문에 수정 입력 가능하다.

 


인터럽트(Interrupt)

 

실행 중인 프로그램을 일시 중단하고 다른 프로그램을 끼워 넣어 실행시키는 것.

인터럽트 요인이 되는 조건이 생겼을 때 실행 중인 프로그램(A)를 중단하여 강제적으로 특정한 주소로 제어를 옮기고

준비되어 있는 인터럽트 처리 프로그램(B)을 실행시키며, 그 처리가 끝나면 원래의 프로그램으로 되돌아가서 계속 실행시킨다.

프로그램 처리의 효율화, 입출력 장치의 동시 동작 온라인 처리의 효율화를 기할 수 있다.

인터럽트의 요인의 종류로는 입출력 종료 인터럽트, 프로그램 인터럽트, 감시 프로그램 호출, 장해 인터럽트 등이 있다.

 

기억해야 할 부분은 실행 중인 프로그램을 일시 중단하고,

"인터럽트 요인이 되는 조건이 생겼을 때" 다른 프로그램을 끼워 넣어 실행시키는 것.

 

아두이노에서 실행 중인 프로그램이란 loop() 함수의 내용을 말하고,

다른 프로그램이란 사용자가 직접 정의한 함수의 내용을 뜻한다.

인터럽트 요인이 되는 조건에는 굉장히 여러가지가 있지만,

지금 설명하려는 조건은 핀의 입력 상태가 변하는 경우만을 이야기 한다.

 

정리하면, loop() 함수의 내용과 상관 없이 지정한 핀의 상태가 변경되었을 때

사용자가 정의한 기능의 함수를 무조건 실행하도록 하는 것이 아두이노의 (외부) 인터럽트라는 말이다.

 

핀의 입력 상태에 따라 인터럽트가 발생하기 때문에 외부 요인에 대한 인터럽트라고 하여 "외부 인터럽트"라고도 한다.

 

이 기능은 하드웨어적으로 지정된 기능이기 때문에 지정된 핀만 사용할 수 있다.

(듀에(Due)의 경우는 예외, 모든 핀에서 사용할 수 있다. 듀에는 칩이 다르기 때문)

 

외부 인터럽트의 종류는 4가지이며, 아래의 4가지 상황 중 원하는 상황에만

인터럽트가 발생하도록 지정하여 사용할 수 있다.

 

1. FALLING - 신호가 HIGH에서 LOW로 바뀔 때 인터럽트 발생

2. RISING - 신호가 LOW에서 HIGH로 바뀔 때 인터럽트 발생

3. CHANGE - 신호가 바뀔 때 인터럽트 발생 (FALLING + RISING)

4. LOW - 신호가 LOW일 때 인터럽트 발생, LOW 인 동안 반복 호출 됨.

 

만일 신호가 아래와 같이 HIGH->LOW->HIGH 로 변화한다고 가정했을 경우

인터럽트가 발생하는 지점을 아래 그림에 표시하였다.

"LOW" 인터럽트는 신호가 LOW일 경우 지속적으로 발생한다.

 

 

아두이노 메가의 경우 6개의 인터럽트 핀을 가지고 있고,

레오나르도를 제외한 대부분의 보드(우노 포함)에서는 2개의 인터럽트 핀을 가지고 있다.

 

우노의 경우 2번 핀과 3번 핀을 인터럽트 핀으로 사용할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Firmware & Embedded > Components' 카테고리의 다른 글

How to Program / Upload Code to ESP32-CAM AI-Thinker (Arduino IDE)  (0) 2022.11.23
LED Control (Button, Potentiometer)  (0) 2022.11.22
Pull-up & Push-down  (0) 2022.11.21
BlueTooth Module(HC-05, 06)  (0) 2022.11.17
DC Motor  (0) 2022.11.16

+ Recent posts