인터럽트
인터럽트
-loop()문이 반복적으로 동작 되고 있는 도중, 일시 중단하고 다른일을 처리하는 기능
-아두이노에서 사용가능한 인터럽트
타이머 인터럽ㅌ, 욉 인터럽트, 시리얼통신 인터럽트 등
혹은 라이브러리 추가시 스케치->라이브러리 포함하기->라이브러리 관리 에서 다운로드
MsTimer2 library
인터럽트 설정
MsTimer2::set(unsigned long ms, void(*f)())
ms: 인터럽트 시간, 밀리초
void(*f)() : 인터럽트 분기 함수명
인터럽트 시작
MsTimer2::start()
인터럽트 정지
MsTimer2::stop()
예제
#include<MsTimer2.h> /*외부 라이브러리를 불러온다*/
int swState = LOW;
int ledState = LOW;
int ledFlag = HIGH;
void setup(){
pinMode(7,INPUT_PULLUP);
pinMode(12,OUTPUT);
MsTimer2::set(500,flash); /*500msec 주기로 flash 함수로 갔다온다*/
MsTimer2::start();
}
void flash(){ /*인터럽트 분기함수*/
if(ledState ==HIGH){
digitalWrite(12,ledFlag);
ledFlag = !ledFlag;
}else if(ledState ==LOW){
digitalWrite(12,LOW);
}
}
void loop(){
if(digitalRead(7) == LOW && swState == LOW){
swState = HIGH;
}else if(digitalRead(7) == HIGH && swState == HIGH){
swState = LOW;
ledState = !ledState;
}
}
댓글
댓글 쓰기