반응형
아두이노에서 인터럽트를 사용하기 위해서는 아래와 같은 코드를 활용한다!
(레퍼런스) https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
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;
}
아두이노 우노는 디지털 2,3번핀이 인터럽트 핀이다!
ESP8266보드는 특별히 인터럽트핀이 지정되어 있지는 않은 것 같다! 예를들어 D3핀을 인터럽트 핀으로 쓰고자 할때 아래와 같이 사용하려 할 것이다!
const byte ledPin = LED_BUILTIN;
const byte interruptPin = D3;
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;
}
그런데 이렇게 하면 ESP8266의 인터럽트가 작동되지 않는다!
ESP8266에서는 인터럽트가 호출하는 함수에 아래와 같은 키워드를 붙혀줘야 사용가능하다(고 한다)
const byte ledPin = LED_BUILTIN;
const byte interruptPin = D3;
volatile byte state = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
void loop() {
digitalWrite(ledPin, state);
}
ICACHE_RAM_ATTR void blink() {
state = !state;
}
그리고 ESP8266에서 워터펌프가 물을 펌프질할때 물의 용량을 측정하기위해 사용하는 유량센서가 인터럽트를 활용하게 되는데 녹칸다의 예제 174편에서 구현된 예제가 대표적이라고 할 수 있어서 참고링크를 걸어둔다!
반응형
'녹칸다 > 녹칸다의잡학사전' 카테고리의 다른 글
[아두이노] ESP8266에서 고정IP를 설정하고 사용하는 방법! (2) | 2022.01.10 |
---|---|
[아두이노] 아두이노에서 디지털핀의 표현과 조건식에 대한 지식 (0) | 2022.01.10 |
[아두이노] pubsubclient로 publish할때 string사용하면 에러가 난다! (0) | 2022.01.08 |
[아두이노] 나누기 연산을 했는데 결과가 무조건 0이 나온다면~ (0) | 2022.01.08 |
[아두이노] 삼항조건연산자로 한줄로 조건문을 사용하는 방법! (0) | 2022.01.08 |