[in English|iArduinoによるプログラム例]
[Arduinoのすすめ][ArduinoConf][ArduinoMonitor][iArduino]

iArduino: Arduino上で動くインタプリタ言語

概要

iArduino は Arduino 上で動くインタプリタ型言語です。Arduino IDE のように、プログラム(スケッチ)を機械語に、あらかじめ変換する言語をコンパイラ型言語、実行中に解釈しながら動作する言語をインタプリタ型言語といいます。 一般にインタプリタ型言語は動作がコンパイラ型言語より低速ですが、 対話的にプログラミングする環境の実現が比較的容易です。

iArduinoはArduinoで動く簡単なプログラムを対話的に作成できるように開発しました。次のようなことが出来ます:

準備する

まずダウンロードしたスケッチをArduino IDEを使ってArduinoに書き込みます。TeraTermなどのターミナルソフトも用意しておきます。

ArduinoをつないだパソコンでTeraTermを起動し、Arduinoのシリアルポートに38400bpsでつなぎます。次のようにiArduinoが OK を表示すれば準備完了です。

使って見る

準備が出来たら、
pinMode(13, OUTPUT)
と入力してエンターキーを押します(以下、入力したらエンターキーを押します)。すると
pinMode(13, OUTPUT)
0
OK
と表示されます。これはpinMode関数を計算したら結果は0でしたという意味です。OKが表示されたらiArduinoは次の命令を受け付けます。さらに
digitalWrite(13, HIGH)
と入力すると、
digitalWrite(13, HIGH)
0
OK
と表示され、Arduino上のLEDが点灯します。
digitalWrite(13, LOW)
を入力すると、LEDが消灯します。これは、Arduinoのスケッチの一部、
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
を順番に手で入力してiArduino上で実行したことになります。入力を間違えると
piMode(13, OUTPUT)
Syntax error
OK
といった表示になります。

Arduino IDE と同じように abs, analogRead, analogWrite, delay, digitalRead, digitalWrite, max, millis, min, rand, pinMode を使うことが出来ます。また、計算も出来ます。たとえば、
analogRead(0)/2
とすると、現在のアナログピン0の値を2で割って表示します。+, -, *, /などの演算子が使えます。

また変数も使えます。変数名はaからzの1文字で表し、26個使えます。宣言は不要で、すべてint型(16bit)です。たとえば

a=1
b=2
c=a+b
を順に入力し、
c
と入力すると
c
3
OK
と表示されます。このように、とりあえず計算式を入れて試してみることが簡単にできるのがインタプリタ型言語であるiArduinoの特徴の一つです。

プログラムを入力して実行してみる

progコマンドを使って次のプログラムを入力してみます。

pinMode(13, OUTPUT);
for(;;) {
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13, LOW);
    delay(500);
}
プログラムの最後にはendを入力します。OKが表示されたら準備完了です。runコマンドを入力してプログラムを実行します。LEDが点滅をします。プログラムの実行中はOKを表示しません。

何かキーを押すとプログラムの実行を中断します。

Paused
>
と表示されたら、cを入力します。そうするとプログラムが再開します。もう一度止めたら、dを入力します。実行した文が順に表示されます。digitalWriteは、すぐに終わり、delay(500)は0.5秒待っていることが分かります。
>d

: true
digitalWrite(13, HIGH)
delay(500)
digitalWrite(13, LOW)
delay(500)

: true
digitalWrite(13, HIGH)
delay(500)
digitalWrite(13, LOW)
delay(500)

: true
digitalWrite(13, HIGH)
delay(500)
もう一度プログラムを止め、Sを入力します。
>S
Stopped
OK
OKが表示されたらコマンドを受け付けます。
save
を入力して
autorun
を入力してArduinoをリセットしてください。こんどは、
Tiny C language interpreter for Arduino
(c) 2012 N.M.
Starting program
と表示され、Arduinoがリセットして動き始めたときから、さきほどのプログラムが実行されています。プログラムの実行を止めるには何かキーを押し、Sコマンドで中断します。Arduinoリセット時にプログラムを実行しないようにするには、
noauto
コマンドを使います。その他のコマンド等については以下を参考に試してみてください。

コマンド一覧

インタプリタがコマンド待ち(OKを表示)のときに使えるコマンドは以下の通りです。

animate	プログラムを実行します。実行する命令を表示し、一命令実行毎に0.5秒の間を開けます。
autorun Arduino起動時にEEPROMに記憶されたプログラムを実行します。
debug	プログラムを実行します。実行する命令を表示します。
edit <行番号>
	プログラムリストの<行番号>の行を置き換えます。置き換える行はeditコマンドの続いて入力します。
list	プログラムリストを表示します。先頭に行番号を表示します。
noauto  Arduino起動時にEEPROMに記憶されたプログラムを実行しません。
prog	progを入力すると、プログラムの入力待ちになります。プログラムの最後にendを入れるとコマンド待ちに戻ります。
run	プログラムを実行します。
save    現在のプログラムをEEPROMに記憶します。
step	プログラムをステップ実行します。一命令実行毎にプログラムの実行を中断し入力待ちとなります。
式	式を入力すると計算結果を表示します。文ではないので ; は不要です。

ステップ実行・プログラム中断時のコマンド

ステップ実行時と、プログラムの実行中に何かキーを押したときには、プログラムの実行が中断し入力待ちになります。プログラムの実行を中断しているときには以下のコマンドを受け付けます。

a	プログラムの実行を再開します。実行する命令を表示し、一命令実行毎に0.5秒の間を開けます。
c	プログラムの実行を再開します。実行する命令の表示、命令実行間の間の有無は再開前と同じです。
d	プログラムの実行を再開します。実行する命令を表示します。命令間で間を開けません。
r	プログラムの実行を再開します。実行する命令を表示せず、命令間で間を開けません。
S	プログラムの実行を中止します。
改行のみ 次の命令を実行します。
式	式を入力すると計算結果を表示します。文ではないので ; は不要です。

文法と書式

基本的にはC言語と同じですが、関数の定義は出来ません。プログラムに記述された文を先頭から実行します。サポートする文は、式文、if文、while文、for文、break文、continue文です。プログラムの長さは最大800バイトです。

式には、単項演算子+,-,~, 2項演算子+,-,*,/,%, ビット演算子&,|,^, 論理演算子 &&,||, 比較演算子<, <=, >, >=, ==, !=, シフト演算子 <<, >> が使えます。定数は、10進数、16進数、2進数(0bxxxで表現)が使えます。Arduinoと同じ定数、LOW, HIGH, false, true, INPUT, OUTPUTが使えます。演算は整数(int, Arduinoでは16bit)のみです。

変数名にはaからzまでが整数型として使えます。新しい変数を宣言することはできません。

サポートする関数は、abs, analogRead, analogWrite, delay, digitalRead, digitalWrite, max, millis, min, noTone, rand, pinMode, servo?.attach, servo?.write, print です。toneは引数が2つのもののみのサポートです。servo?.attach, servo?.write の ? には0から11の数値が入ります。Servoライブラリのクラスを Servo servo?; と宣言した場合と同じように使えます。servo?.attachの引数は1つ(ピン番号のみ)です。print関数は整数型の引数を1つとり、その値を10進数で表示(シリアルに出力)する関数です。

iArduinoのサポートする範囲(まとめ)

変数:a-z の26個(16bit int型)
制御文:if, else, for, while, break, continue
定数:LOW, HIGH, INPUT, OUTPUT, true, false
演算子:+, -, *, /, %, &, |, ^, &&, ||, <, <=, >, >=, ==, !=, >>, <<
数値:10進数、16進数、2進数(16bit intのみ)
関数:abs, analogRead, analogWrite, delay, digitalRead, digitalWrite, max, millis, min, noTone, rand, pinMode, servo?.attach, servo?.write, tone, print

コマンド:animate, autorun, debug, edit, list, noauto, prog, run, save, step

ダウンロード

iArduino with iArduinoTerminal

まだ使い方の説明を書いていませんが、専用のターミナルソフトiArduinoTerminalを作成しました。変数やピンの状態をモニタできます。iArduino-0.6aとセットでどうぞ。iArduinoにモニタ用のプロトコルを付加しているだけなので、上記とまったく同じ使い方もできます(ただし、プログラムに使えるメモリが600バイトに減少しています)。

Arduinoフォルダ(Windowsの場合、デフォルトではマイドキュメント内)にlibrariesフォルダを作り、その中にiArduino-0.6a.zipに含まれるiArduinoフォルダを入れてください。 Arduino-IDEを起動すると、Examplesの中にiArduinoがあるはずです。その中に(さらに)iArduinoがあるので、それを開いてArduinoにUploadすれば準備完了です。

またiArduino(インタプリタ)ではなく、Arduino言語(Arduino-IDEで作るスケッチ)を使っているときにiArduinoTerminalでピンの様子を観察できるようにしてみました。Examples→iArduino→iArduinoTerminalの中に例があります。Arduinoに付属のExampleについて変更をしたものですので比較してみてください。


iArduinoTerminal for Android

iArduinoTerminal の Android 版です。画面の解像度が1280x800以上必要です。動作確認は

で行っています(開発時期によって全ての組み合わせで試せてはいません)。Arduino Leonardについては動作しません。Android 3.1以降で動作するはずです。ksksueさんのPhysicaloid libarayを利用して作成しています。

Arduinoにアップロードするスケッチをアプリ内に持っているので、PC/Macなしで開発を始められます。アプリを立ち上げた右上にあるメニューアイコンをタップするとボードの選択画面が出るので、正しいものを選んで Upload ボタンをタップしてください。

SAMPLEタブをタップするとiArduinoによるプログラム例を表示します。サンプルプログラムが表示されている状態で、ダウンロードボタンをタップするとエディタにコピーされます。そのあとで「prog」ボタンをタップしてiArduinoをプログラムし、「run」ボタンをタップすればすぐにプログラム例を実行して試せます。

iArudinoを使わない場合もArduinoMonitor-0.2以降とプロトコルに互換性があるので、ArduinoMonitorのAndroid版としても利用できます。

(画面はバージョン 02 のものです。03からは背景を白にしました。)

ダウンロード

履歴

変更について

iArduino-0.2から0.4への変更は主に通信部分です。0.4からはiArduinoのプログラムに使えるメモリが若干減少しています(800バイト→600バイト)。iArduinoにモニタ用のプロトコルを付加しているだけなので、上記とまったく同じ使い方もできます。0.4から0.5への変更でiArduinoをArduinoのライブラリ化しています。


戻る
(c) 2012-2014 N. Mitsunaga (mnoriaki あっとマーク gmail.com)