아두이노에서 정의되지 않은 핀 사용하기

아두이노 보드는 각종 라이브러리들을 잘 만들어 놓아 쉽게 프로그래밍이 가능하다. 일례로 가장 간단한 예제인 blink 예제를 보면 pinMode() 함수를 사용해서 온오프할 핀을 출력으로 정하고 digitalWrite()함수를 사용해서 LED를 온오프한다.

 * 참고로 pinMode() 함수를 사용할때 주의할 점은 인자로 받아들이는 pin의 숫자가 아두이노 보드에 명기된 숫자이지 AVR칩의 pin number가 아니라는 점이다.

Arduino Uno보드의 경우는 Atmega328칩의 모든  핀들이 보드에 나와있어서 문제가 없으나 위 그림과 같이 Arduino Mega보드의 경우 일부 핀들이 보드에 나와있지 않다. 보드에 핀이 나와있지 않으니 라이브러리에도 핀들이 정의되어 있지 않다. 따라서 만약에 이 핀들을 사용을 하려려면 라이브러리를 수정을 해야 하며, pinMode() 라는 함수가 어떻게 동작하는 지 알아야 한다.

위 코드에서 보듯이 digitalPinToBitMask() 함수와 digitalPinToPort() 함수를 어떤 포트의 어떤 핀을 설정할 것인지를 알아낸다. 이 함수들을 따라가다 보면 pins_arduino.c pins_arduino.h에 각 핀들이 어떤 포트에 있는지 정해져 있는데, 이곳에서 추가를 해야 한다. ATmega 2560이 아두이노에서는 디지털 핀의 경우 53번까지 정의가 되어 있으므로(ATmega2560-Arduino Pin Mapping 참고) 정의 되어 있지 않은 핀은 이 번호뒤에 정의해서 사용하면 된다.

pins_arduino.h 파일은 아두이노 1.0.6의 경우 아래 경로에 있다. Arduino.app/Contents/Resources/Java/hardware/arduino/variants/mega/pins_arduino.h

2 comments on “아두이노에서 정의되지 않은 핀 사용하기

  1. -

    죄송하지만, 헤더를 수정하고 적용을 시켜도, 막상 mpb-atmega2560 보드에는 적용이 되지 않네요… 혹시 공식 아두이노 보드가 아니라서 그런 건가요?? 그렇다고 해도, 어차피 아두이노 스케치가 컴파일링 해서 마이컴에 넣는 것으로 알고 있는데, 제가 잘못알고 있는 건가요??

    • - Post author

      mpb-atmega2560 보드를 아두이노에서 컴파일해서 작동이 되는지는 확인을 하셨나요? 그렇다면 기존에 아두이노에 정의되지 않는 핀을 정의해서 사용하면 동작해야 합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *