Nano 33 IoT 보드 Interrupt 사용
인터럽트란 사전에 보면 '중단시키다'란 의미를 가지고 있다. 어떤 일(이벤트)가 발생해서 하던 일을 잠시 멈추고 인터럽트 서비스를 실행한 후 원래 하던 일을 계속 실행한다. 정상적인 프로그램 수행 중에 외부에서 발생한 사건을 놓치지 않아야 하고, 발생하는 즉시 실행하기 위한 인터럽트 처리 프로그램을 실행하는 일을 말한다. 하드웨어와 소프트웨어 모두 적용된다. 특히 인터럽트를 위해 사용하는 정해진 PIN에서 발생하는 신호를 잡아 처리하므로 외부 인터럽트라고 부른다.
인터럽트 [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;
}
'개발자 > Arduino' 카테고리의 다른 글
Arduino Nano 업로드할 때 오류 avrdude : stk500_recv( ) 해결 (0) | 2021.04.01 |
---|---|
BME280 I2C 온도 습도 기압 센서 모듈 사용법 (0) | 2021.03.30 |
LSM6DS3 Breakout Hookup Guide (0) | 2021.03.24 |
아두이노 타이머 라이브러리 목록 (0) | 2021.03.19 |
Arduino Serial Monitor에 온도 섭씨 기호를 출력하는 쉬운 방법 (0) | 2021.03.14 |
arduino sleep mode 절전 모드 사용하기 (0) | 2021.03.12 |
Portenta H7 BLE 연결 (0) | 2021.03.03 |
Portenta H7 USB Host로 사용하기 (0) | 2021.03.02 |
더욱 좋은 정보를 제공하겠습니다.~ ^^