BASIC4MCU | 질문게시판 | 아두이노 uno wifi rev2 인터럽트 사용
페이지 정보
작성자 신비한호랑이 작성일2022-12-31 09:54 조회499회 댓글3건본문
안녕하세요 아두이노 uno wifi rev2 보드로 공부중입니다.
제가 사용하려는 기능은 pullup 상태의 버튼 2개를 눌렀을 때 각각 LOW가 되어 인터럽트에 연결되어 있는 함수가 실행되게 하는 것입니다.
아래 코드는 인터럽트 없을 때 1초마다 print0을 출력하다가 인터럽트 발생 시 print1 또는 print2가 출력되게 하는 것입니다.
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
attachInterrupt(0, print1, FALLING);
attachInterrupt(1, print2, FALLING);
}
void loop()
{
Serial.println("print0");
delay(1000);
}
void print1(){
Serial.println("print1");
delay(100);
}
void print2(){
Serial.println("print2");
delay(100);
}
알아본 결과 아두이노 uno에서는 인터럽트 벡터 0번이 D-2번핀, 벡터 1번이 D-3번핀을 활성화 하는 것으로 이해했습니다.
제가 uno wifi rev2도 똑같은 인터럽트 벡터일 것이라고 생각을 해서 도전을 했다가 안되는 것을 확인하고, 제 보드의 칩인
atmega4809에 대한 데이터 시트를 확인해봤습니다.
첨부 파일에 데이터시트에서 찾은 atmega4809에 해당하는 인터럽트 벡터 맵핑을 찾았습니다.
6, 20, 24, 29, 34, 35번 벡터넘버가 PORTn에 대한 외부 인터럽트인걸 확인했습니다.
그런데 아두이노 UNO 같은 경우는 인터럽트 벡터에 해당하는 특정핀이 딱 있어서 거기를 쓰면 되는데
uno wifi rev2는 칩의 몇번 gpio를 쓰는 것인지가 아니라 PORT A, B, C, D 이런식으로 써있다보니 PORTA에서 어떤 핀을 써야하는건지 알기가 어려웠습니다.
제 나름 데이터시트를 오래 뒤져보고 실험을 여러차례 해봤는데 찾지 못해서 글을 올립니다.
댓글 3
조회수 499master님의 댓글
master 작성일https://forum.arduino.cc/t/attachedinterrupt-arduino-uno-wifi-rev2/936807/7
신비한호랑이님의 댓글
신비한호랑이
master님 감사합니다 나름 열심히 찾아봤다고 생각했는데 제가 좀 더 찾아봤어야 한다는 생각을 하게 되었습니다!
신비한호랑이님의 댓글
신비한호랑이 작성일
uno wifi rev2 보드를 사용하시면서 디지털 핀으로 상승 또는 하강 엣지 인터럽트를 사용하려는 분들은 아래 코드로 해보세요~
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), print1, FALLING);
attachInterrupt(digitalPinToInterrupt(3), print2, FALLING);
}
void loop()
{
Serial.println("print0");
delay(1000);
}
void print1(){
Serial.println("print1");
delay(100);
}
void print2(){
Serial.println("print2");
delay(100);
}