Da VinciをやっぱりArduinoとして使ってしまって気付いた事。

 昨日、結局FLIPを使わずDa VinciをArduino Leonardo互換ボードにしてしまいましたが、何故そうするのか考えてみました。


 わざわざArduinoに批判的な人の言う「不自由な環境」にしてしまったわけですから。


 考えているとだんだん、逆に、何故それほどまでに自分がArduinoを使うのか、と言う問題に頭がシフトしました。
 1.(半)完成品である事。もしくは、完成品のクローンであること。
  つまり、8MHzであろうが16MHzであろうが、クリスタルであろうがセラロックであろうが、知りたい物はいざとなれば「動く物を手に入れられる」。それも、必要十分かつ共通の回路を。
  たとえばPICやATTinyの作例なんかをみると、それにしか使えない物だったり、回路図に余計な物がついていたりします。
こっから、自分が使いたい物へ持って行くのもホネだし、逆に、自分が作った部分とボードの部分の切り分けが難しい。
  ここで、最初からメインボードをUNO互換、とか、mini互換、とか、Leonardo互換にしておけば、本物のUNOやらなんやらを繋いで、モジュール単体の試験が出来るわけです。
  逆に、モジュールをUNOに繋ぐと動くのに、モジュールを自作Arduino互換ボードに繋ぐと動かない、なんてのは、自分が作ったボードの方が悪いって事です。

 2.Arduinoっていう「枠」があること。

 自由さが至高だと思ってる人は結構居ます。

 たとえば「書こうと思えばアセンブラでも書けるし、Cでも書ける。ライブラリってのはたとえば○○するには、△△と××ってのがあって、どっちを使ってもいいよ、好みです」

 これは凄い事かもしれない。実際、プログラマーって人種はそういうのを使いたがる。
 でもこれは職業プログラマをやっていて、大きく作る側と使う側で認識が異なる事を理解した。

 以下自分が気にしている事。

 1.同じ事が2種類以上のやり方で出来る場合は、どちらを何故推奨するかかならず明記する。
  ※どっちでもいいですよ、ってのは、全く答えにはなっていない。
  どっちでもいいからやりたいんであって、使う方にだって実はどうでもいい。そんな自由は実は要らない。逆に「これでしか出来ません」だったら、ブツブツ文句は言われるかもしれないけど、何も悩まず使ってくれる。

 2.出来れば、やり方と機能は1:1に結びついているべき。違う事をしたのに同じ事が起こる、同じ事をしたのに違う事が起こる。これは「たとえマニュアルに書いているとしても」やってはいけない作り。
  押したら交互に機能がトグルする、ってボタンなら押しこみ式のトグルボタンにして色が変わるとかで充分じゃない、とか思うかもしれないけど、実は2つの、「片方を押せば片方が出てくるラジオボタン」とか、左右に動かすスライドスイッチを用意するべき。だって3つ以上になると困るし。あと、PCだと、トグルなのに押したらキャプションが変わるとか意味不明。「分かりにくい」とキレられても仕方ない。
  人によってはボタンを連打する人も居る。

 3.人に教えてもらう時に、ちゃんと教えてもらった通りにやれば、その通りの結果が出る事。
  ※「適宜、環境に従って読み替えてください」はマニュアルとして確実に間違っている。それが知りたくて聞いたのに、自分で読み替えろとはどういう事だ。
   「xxxx(ウィンドウズで動かす場合は適宜読み替えてください)」とかよく見るけど、どうしてもの例外ケース以外、ちゃんとマニュアルを別個に書けと言いたくなる。

 4.枠を超える事が出来る仕組みも、枠で決める。
  あとは勝手にしてください。ってのは、とてもよろしくない。
  「勝手に拡張して○○ってのを作ってみたんだけど、どうも動かないんだ」こんな質問に答えられるわけがない。
  こんな感じで、これを拡張してくださいね、ってスタブを提供できれば、より良い。
  そしたら「えーっと、まず、一旦コード全部削って、スタブで固定値返すと動きます?」とか、「作った物単体では動きます?これ、単体を一通りテストするモジュールですのでお貸しします」なんてやりとりが出来る。

 この辺に対して、Arduinoはとてもうまい感じでやってます。

 使うのはIDE。言語はArduino言語
 C++に毛が生えたような言語。
 これでいいのです。
 これの上で作っていれば他の環境に持って行っても、下回りが旨く隠蔽してくれてそれなりに動くと言うのがポイントです。
 PORTB |~ _BV(1) よりも、よっぽど素直。

 あと、(4)も大事です。自分は普段シールドを「要らない」と言いまくってるが、実はあれは凄い物なのです。
 もちろんクローンから使う時も、Arduinoでのピンアサインさえわかれば簡単に繋げますしね。

 ピンアサインに関してもいろんなMCUでいろんな名前で呼ばれてる物に対して、「Digital 0〜14」「Analog A0〜A5」と名前がついてる事すら便利な物だと思います。

 こう考えたときに、よく出来てるなとも思うし、デメリットを考えてもArduinoが便利だなぁ、と思う感じ。
 ましてやDa Vinci。次に人に勧めるときは、多分これを薦めると思う。だってほんとに安いし。
 PICの充分なスペックのMCUを二つ三つ買う値段で、USB直結のこれが買えちゃって、統一したAPIがあって、人に聞けて。

 Leonardoになって多少難しくなっちゃったけど、結局Arduinoを勧めると思う。結局WinAVRで組むことになろうが。