?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

아두이노 SoftwareSerial Interrupt 질문 드립니다.

페이지 정보

작성자 김두리 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일16-02-02 11:37 조회2,593회 댓글2건

본문

안녕하세요~!

아두이노와 모바일 간의 블루투스 통신 구현 중입니다.

HC-05 블루투스 모듈이 내장된 보드를 사용하고 있구요.

SoftwareSerial을 이용해서 통신 송수신 테스트까지는 했는데

인터럽트를 어떻게 받아야할 지 모르겠습니다.

블루투스 모듈을 Interrupt 핀인 2,3번에 연결해서

arduino - attatchInterrupt를 사용해서 Interrupt를 받으려고 했었습니다.

아두이노 레퍼런스에서 digitalPinToInterrupt 함수를 통해서 핀을 연결하라길래

attachInterrupt(digitalPinToInterrupt(2), BTEvent, CHANGE);

이런 식으로 작성을 했는데, digitalPinToInterrupt 함수가 정의되어있지 않다고

하더라구요..

이렇게 하는게 아닌건지..

SoftwareSerial 라이브러리로 Interrupt 받을 수 있는 방법이 있을까요?

(기존 HardwareSerial의 SerialEvent와 같은 구현을 하고싶습니다.)


 

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

1. 그냥 인터럽트 넘버를 직접 지정해서 사용해보세요.
http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_pract&wr_id=2&page=2

2. Serial 통신에 인터럽트를 사용한다면 TX 에는 사용할 필요가 없을겁니다. RX 만 인터럽트 핀을 쓰면 될 것 같아요. 그리고 그보다 중요한 문제가.. 정확치는 않지만 SoftwareSerial 에서 아마 자체적으로 인터럽트를 사용하기 때문에 외부에서 인터럽트를 다시 사용하는 것이 문제가 될 수 있는 것 같습니다. 그래서 SoftwareSerial에 인터럽트가 필요한 경우 라이브러리 코드를 직접 수정해서 사용하길 권합니다. 아래 링크의 마지막 내용을 참고해서 수정해보세요. (SoftwareSerial 라이브러리에서 데이터를 받아 처리하는 recv() 함수에서 원하는 작업을 처리하는 방법)
http://stackoverflow.com/questions/25109324/interrupting-with-softwareserial-on-arduino
SoftwareSerial 통신을 처리하는 코드이기 때문에 최대한 빠르게, 그리고 간단한 작업만 처리해야 합니다.

김두리님의 댓글

김두리 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

답변 감사드립니다.
1번 방식으로 해서 인터럽트를 처리할 수 있었습니다.
2번 내용과 관련해서는..아직 문제점이 나타나지 않아서 추후 고려해보겠습니다.
감사 드립니다!