GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
GR-SAKURA と GR-KURUMI は謳い文句として「Arduino UNO互換」や 「Arduino Pro Miniと互換性があります」と言ってるわけですが、実際は僅かな差異や仕様の違いが存在するのは皆様のご承知のところと思います。
Arduino 及びその派生物(以下、Arduino 等)を以前から使用されていて、GR-SAKURA や GR-KURUMI に Arduino 等で作成した作品を移植したい、あるいは両方で同じプログラムを動かしてみたいという方はけっこういらっしゃるのではないかと思うのですが、今のところその方法についてまとまったアレが見あたらないので DISCUSSION を立ててみたもの也。
プログラムは .pde や .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
等と個別の対処をすれば、まあうまいこと行く場合も多いんではないだろうか。
以上の方法で取り合えず気に入らないところ:
現状、Arduino だけに限っても、AVR のプロセッサを積んだ Uno 等と、ARM Cortex-M3 を積んだ DUE とを判断するにはコンパイラに定義されているマクロからプロセッサの型を判断するしかない(のかな?)様なので、まあ、仕方ないか。
Arduino IDE の Tool → Board で設定するターゲットの型番をマクロ等で参照できれば、そっちの方が方法としては望ましい。GR-SAKURA/KURUMI でも同様のマクロを定義すれば良い。GR-KURUMI で定義されているマクロ ARDUINO は邪魔。