인터럽트

인터럽트
-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;
  }
}

댓글

이 블로그의 인기 게시물

EBIMU-9axis

CMAKE 문법

Gyro sensor