본문 바로가기

개발자/Arduino

Nano 33 IoT 보드 Interrupt 사용

반응형

 

 

Nano 33 IoT 보드 Interrupt 사용 

 

인터럽트란 사전에 보면 '중단시키다'란 의미를 가지고 있다. 어떤 일(이벤트)가 발생해서 하던 일을 잠시 멈추고 인터럽트 서비스를 실행한 후 원래 하던 일을 계속 실행한다. 정상적인 프로그램 수행 중에 외부에서 발생한 사건을 놓치지 않아야 하고, 발생하는 즉시 실행하기 위한 인터럽트 처리 프로그램을 실행하는 일을 말한다. 하드웨어와 소프트웨어 모두 적용된다. 특히 인터럽트를 위해 사용하는 정해진 PIN에서 발생하는 신호를 잡아 처리하므로 외부 인터럽트라고 부른다.

네이버 전자용어사전 https://terms.naver.com/entry.nhn?cid=42341&docId=753829&categoryId=42341

 

인터럽트 [interrupt] 

실행 중인 프로그램을 일시 중단하고 다른 프로그램을 끼워 넣어 실행시키는 것. 인터럽트 요인이 되는 조건이 생겼을 때 실행 중인 프로그램(A)을 중단하여 강제적으로 특정한 주소로 제어를 옮기고, 준비되어 있는 인터럽트 처리 프로그램(B)을 실행시키며, 그 처리가 끝나면 원래의 프로그램으로 되돌아가서 계속 실행시킨다. 프로그램 처리의 효율화, 입출력 장치의 동시 동작 온라인 처리의 효율화를 기할 수 있다. 인터럽트 요인의 종류로는 입출력 종료 인터럽트, 프로그램 인터럽트, 감시 프로그램 호출, 장해 인터럽트 등이 있다. (전자용어사전, 1995. 3. 1., 월간전자기술 편집위원회) 

인터럽트에 대한 상세 설명은 Nick Gammon’s notes를 참고하세요. 

아두이노 보드에 따른 인터럽트 디지털 Pin

BOARD DIGITAL PINS USABLE FOR INTERRUPTS

Uno, Nano, Mini, other 328-based

2, 3

Uno WiFi Rev.2, Nano Every

all digital pins

Mega, Mega2560, MegaADK

2, 3, 18, 19, 20, 21

Micro, Leonardo, other 32u4-based

0, 1, 2, 3, 7

Zero

all digital pins, except 4

MKR Family boards

0, 1, 4, 5, 6, 7, 8, 9, A1, A2

Nano 33 IoT

2, 3, 9, 10, 11, 13, 15, A5, A7

Nano 33 BLE, Nano 33 BLE Sense

all pins

Due

all digital pins

101

all digital pins (Only pins 2, 5, 7, 8, 10, 11, 12, 13 work with CHANGE)

 

사용 구문

  • attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) (recommended)
  • attachInterrupt(interrupt, ISR, mode) (not recommended)
  • attachInterrupt(pin, ISR, mode) (Not recommended. Additionally, this syntax only works on Arduino SAMD Boards, Uno WiFi Rev2, Due, and 101.) 

매개변수

  • 인터럽트 : 인터럽트 횟수. 허용되는 데이터 유형 : int.
  • 핀 : Arduino 핀 번호.
  • ISR : 인터럽트가 발생할 때 호출할 ISR입니다. 이 함수는 매개 변수를 취하지 않고 아무것도 반환하지 않아야 합니다. 이 기능을 때때로 인터럽트 서비스 루틴이라고 합니다.
  • 모드 : 인터럽트가 트리거 되어야 하는 시기를 정의합니다. 4 개의 상수가 유효한 값으로 미리 정의되어 있습니다.
  • LOW는 핀이 낮을 때마다 인터럽트를 트리거합니다.
  • CHANGE 핀이 값을 변경할 때마다 인터럽트를 트리거
  • RISING 핀이 로우에서 하이로 갈 때 트리거를 위해 RISING
  • FALLING핀이 하이에서 로우로 갈 때 FALLING.
  • Due, Zero 및 MKR1000 보드는 다음을 허용합니다. HIGH는 핀이 높을 때마다 인터럽트를 트리거합니다. 

예제 코드

 

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^