Arduino のソフト開発で、ハード(回路)に問題があるのか、制御ソフトに問題あるのか切り分けるのに、VSのような高度なデバッグ機能があると変数の値やピンへの入出力が正しく行われているか解かって嬉しいのだが、標準のArduino IDEでは残念ながらそこまでの機能は無い。
で、UnoArduSimというシミュレータソフトがある。
名前からUnoをシミュレートしており限定されるのだが、それはそれでソフトのアルゴリズムが確認できればあとはピン配置やレジスタ置換などで済み、そのマイコン専用の機能以外は一般的なマイコンの機能はデバッグ出来そうな感触がある。
起動すると以下のような感じ。
左がデバッガのトレース画面で、右がシミュレータ画面。左下は変数のトレースを示す。
詳しい使い方はメニューの[Help][Quick Help]や、よそのサイト様に譲るが、概略としてまず左のトレース画面は "編集画面ではない" 事。シミュレータ画面ではダブルクリックや左右シングルクリックで機能を呼び出すようになっている。
ツールバーはいわゆるIDEのボタンが配置されており、まずはチュートリアルとして以下の方法を示す。
【サンプルスケッチ Blink の実行】
Arduino IDEのサンプルで最初にやるLチカのサンプルスケッチ Blinkを使って基本的な使い方を学ぼう。
まずArduino IDE のどのバージョンでもいいので起動し、[メニュー][スケッチ例][Basic][Blink]でスケッチを表示させる。
これをUnoArduSimに読み込ませるのだが、すべて選択しコピーする。そしてUnoArduSimの[メニュー][Edit/View]から編集画面を開き、そこにペーストする。
この画面では対応するカッコや予約語がハイライト表示されているが、これは画面左下の「BOLD HIGHLIGHTING」を押したため。
その他のボタンで特徴的なのは「コンパイル」「適用」「保存」ボタン。この画面がソースの編集画面なのでここでスケッチの変更を行える。
「保存」してもいいし、「適用」してもいい。適用後はメインメニューで「Save As」保存を忘れない事。ここではコンパイル&適用ボタンを押しメイン画面に戻った様子を示す。
BlinkはUnoの13ピンに繋がったLEDを点滅させるスケッチで、次のように右上の「LED」の空白の欄に「13」と直接入れてやれば、LEDを接続した事になる(青い吹き出し)。
もうちょっと詳しく説明すると、LEDのRYGはRed,Yellow,Greenの略でLEDを3色から選べ、丸いラジオボタンは、ピンに電流が通ったら(1になる)光る正論理か、逆に消える負論理かを選択する。たぶんプルダウン(1で光る)かプルアップ(1で消える)で繋いだという事だろう。そしてメニューには基本的な実行とストップ、リセットボタンなどがある。
左のトレース画面にはUnoArduSimが勝手に追加したメイン関数がある。これはArduino IDEでは隠蔽されているが、多少違う(init関数が無い)がほぼ同じ物が実はコンパイルされている。
左下には変数ledがその値とともに表示されており、ダブルクリックすると以下のように値を変更できる。キャンセルは×ボタン。
また右画面のピン、例えば13番ピンの値を左クリックすると、デジタル値としてみたピンの値を示すオシロスコープ、右クリックするとアナログ値としてみたピンの値を示すオシロスコープの様子が表示される(前の画面の青い吹き出し)。
同じように「SERVO」という欄に「13」と入れてやるとサーボモータに13ピンを繋いだことになり、実行するとサーボモータが回転する。画像は2回LEDを光らせるのと同じ回数実行した様子。
ピン番号を入れる時次のようなエラーメッセージを表示する事がある。
例えば次に説明する「PUSH」ボタンに13と入れた場合、入力なのにpinMode関数でOUTPUT指定されているため。
すでに「SPISLV」で使用済みの12を「LED」で12と入れた場合は、ピン番号が重複しているため。
また「PUSH」はプッシュボタン(タクトスイッチ等)で、latch(ラッチ)というのはボタンを押したままにするのか、手を離すとスイッチOFFにするのかを決める。latchを押すとすぐ下の黒いボタンは手を離しても押したままになる。そしてラジオボタンの上を選択すると、押すとONになり、下は押すとOFFになる。ついでに13番を指定したLEDもRからYに変えて、ラジオボタンは下方向(↓)の正論理にしておこう。
さて、ここでは青い枠に示すようにEdit/View画面でソースを変更し、PUSHボタンの動きを確かめてみよう。まず以下のように、一度スケッチBlinkを[File][Save As]で保存し、UnoArduSimを終了、再起動しよう。simple.inoという最初のサンプルが表示されるのでそれから青い枠に示すソースを追加する。コンパイルして正しい事を確認するのを忘れないように。
すると、前の画面の通り実行後、PUSHボタンを押すと13を指定したLEDが黄色く光り、Unoのピンも0から1に変化するのがわかる。基板上の13番ピンのLEDも光っている。
あとは以下のようにスライドスイッチとブザーを示す。クリックでON/OFF、抵抗値1KΩでつながっているらしい。ブザーはtone関数のサンプルスケッチで動くようだ。
ヘルプにあるような他の部品は[メニュー][Configure][I/O Devices]で、画面で0になっているところを1にすると出現する。
その他の部品も以下の通り。
「SERIAL」や「SFTSER」を右クリックするとシリアルモニタが、「SPISLV」「I2CSLV」を右クリックすると送受信バッファの内容が表示される。
ちなみに、日本語でぱっと見わからないところはこんな所かな~。あとはヘルプなり、フォーラムなりをのぞくといいかも。
これでソフトが正しくピンのON/OFFをしているか、変数は正しいかをハードをくっつけなくてもデバッグ出来るな~