그 Arduino 핀은 중단할 수 없습니다

Arduino Gemma에 버튼을 연결하는 것이 쉬울 것이라고 생각했습니다.

그러나 그것은 작동하지 않았습니다. 전체page on attachInterrupt 를 읽었지만 일부 핀을 인터럽트에 사용할 수 없다는 직감 외에는 아무것도 얻지 못했습니다.

그래서 코드를 살펴봐야 했고, 여기서 이 작은 스니펫( Arduino.h )을 찾았습니다.

#define NOT_AN_INTERRUPT -1


그리고 $HOME/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/gemma/pins_arduino.h에서 다음을 읽었습니다.

#define digitalPinToInterrupt(p) \
   ((p) == 2 ? 0 : NOT_AN_INTERRUPT)


그래서 여기 당신을 위한 아이디어가 있습니다: 당신의 스케치에 약간의 스니펫을 추가하세요:

template<int PIN>
constexpr int interruptFor() {
  constexpr auto i = digitalPinToInterrupt(PIN);
  static_assert(i != NOT_AN_INTERRUPT,
     "board can't use this pin for an interrupt");
  return i;
}


대신 다음 함수를 사용하세요.

namespace my_wiring {
  constexpr auto BUTTON_PIN = 2;
}

constexpr auto BUTTON_INTERRUPT =
  interruptFor<my_wiring::BUTTON_PIN>();


이제 내 Gemma(ATtiny85 사용)에서 내BUTTON_PIN를 예를 들어 1:

sketch_aug14a.ino: In instantiation of
  'constexpr int interruptFor() [with int PIN = 1]':
sketch_aug14a/sketch_aug14a.ino:19:70:   required from here
sketch_aug14a/sketch_aug14a.ino:11:3: error: static assertion failed:
   board can't use this pin for an interrupt

   static_assert(i != NOT_AN_INTERRUPT,
   ^~~~~~~~~~~~~


그것은 시간을 절약했을 것입니다! 어쩌면 나는 이것을 arduino 헤더에도 소개할 것을 제안할 것입니다. 시간이 있을 때.

좋은 웹페이지 즐겨찾기