Arduino互換ボードの条件コンパイル

がじぇっとるねさすコミュニティの記事よりメモメモ。

要点

  • ソースは .ino ではなく、ふつうに .cpp/.c と .h で
  • 機種ごとにヘッダのインクルードを条件コンパイル
    • ここで分かりやすい機種分けの定数を定義しておく
  • その他の機種依存部分も条件コンパイル
    • 先に定義した機種分けの定数を使う

ヘッダのインクルード部分

#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__)
    #if defined(ARDUINO) && ARDUINO >= 100
        #include <Arduino.h>
    #else
        #include <WProgram.h>
    #endif
    #define _ARDUINO_AVR_ 1
#elif defined(__SAM3X8E__)
    #include <Arduino.h>
    #define _ARDUINO_DUE_ 1
#elif defined(__RX__)
    #include <rxduino.h>
    #define _GR_SAKURA_ 1
#elif defined(__RL78__)
    #include <RLduino78.h>
    #define _GR_KURUMI_ 1
#else
    #error unknown target.
#endif

機種依存部分

#if _ARDUINO_AVR_
// Arduino 依存部分
 〜
#endif
#if _ARDUINO_DUE_
// Arduino DUE 依存部分
 〜
#endif
#if _GR_SAKURA_
// GR-SAKURA 依存部分
 〜
#endif
#if _GR_KURUMI_
// GR-KURUMI 依存部分
 〜
#endif