|
|
Air-Script(エア・スクリプト)は組み込み機器向けに開発されたインタプリタ言語です。
機器に搭載したSDカードなどのメディアにあるスクリプト言語ファイルを実行します。
変数を用いた複合的な計算や条件分岐が可能です。
また、機能APIによって、画面制御や通信、センサ制御、IOポート入出力、オーディオ制御などを行う事が可能です。
|
|
|
1.1. 組込プログラミングを簡単に
|
≪
TOP
≫
|
|
Air-Script でプログラミングを行う事で組込機器の制御が極めて簡単になります。
機器の初期化などの複雑な制御は内部プログラムが行いますので、ユーザーはIO信号の入力や
それに対する条件分岐、画面、通信、センサ、音声制御などをシンプルに記述する事が可能です。
|
|
種別 | 機能 | 説明 |
プログラム制御機能 | 条件分岐 | IF文で条件分岐可能です。 |
プログラム制御機能 | サブルーチンコール | スクリプト中にサブルーチンを定義し、最大深さ16まで呼び出し可能です。 |
プログラム制御機能 | 複合計算式 | 括弧や組込関数(sin()、exp()、など)を複雑に組み合わせた計算式を記述できます。 |
API | IO入出力 | 1行の記述でIOポートからの入出力を行う事ができます。 |
API | 画面制御 | LCDに文字列、矩形、イメージなどを表示可能です。 またセレクトメニューやダイアログボックスを使用できます。 |
API | ボタン入力 | ボタンが押された事を検知する事が出来ます。 |
API | シリアル通信 | 複数のシリアル通信ポートの送受信が可能です。ボーレートも変更可能です。 |
API | センサ入力 | GPS、加速度センサ、角速度センサ、気圧センサ、方位センサなどが使用可能です。 |
API | I2C通信 | I2C通信ラインに外部デバイスを接続し、I2Cで制御可能です。 専用APIが用意されていますので、1行で書き込みや読み出しが可能です。 |
API | Audio制御 | Waveファイルの再生や正弦波の発声などを行う事ができます。 また、数値を音声で読み上げる事ができます。 |
API | ファイルシステム | SDカードのファイルの読み出し、書き込みが可能です。(FAT16) |
| | |
|
|
1行に1つの文を記述します。
基本的に文は一番上の行から順に、下の行へ向かって実行されます。
文が分岐文である場合、実行順序は変更され、指定のラベルへ飛んでそこから下向きに実行されます。
|
|
文の種類 | 説明 | 例 |
機能API | APIの呼び出し。 $:n, で始まり(n=1...)、必要な場合は引数が後ろに続く。 | $:23,"Hello world!", |
代入文 | [v] = [式] の形式で変数に計算結果を代入する。 | w1 = sqrt(x*x + y*y) |
if 文 | if (条件式) $(分岐) (分岐先) の形式で条件が成立すれば分岐する。 | if loop1 > 8 $jmp :LABEL |
$call :(分岐先) | プログラムの先頭から見て最初に現れる同名のラベルをサブルーチンとしてコールする。(*1) | $call :LABEL |
$jmp :(分岐先) | 前方の一番近い同名のラベルへ分岐 | $jmp :LABEL |
$bak :(分岐先) | 後方の一番近い同名のラベルへ分岐 | $bak :LABEL |
$exit | プログラムを終了する。 | $exit |
$return | サブルーチンから呼び出し元へ戻る。(*2) | $return |
ラベル | :(文字列) の形式で、飛び先の位置を表す。同じラベルが複数存在してもOK。 | :LABEL :LB[1] |
(*1) 最大呼び出しネスト深さは16です。
(*2) サブルーチンとして呼び出されていないコンテキストでは、この文の実行でプログラムを終了します。
|
|
|
2.1.1. APIの呼び出しの結果を代入
|
≪
TOP
≫
|
|
左辺に変数を置き、= 又は += の代入演算子を使って、右辺に置いたAPIの呼び出しの結果を
変数に代入する事ができます。
結果を変数に代入できるAPIは画面に出力するタイプのAPIです。画面に表示する代わりに
変数に書き込みます。
|
|
このシステムでは、変数(数値、文字列)は予め定義されています。
スクリプト中で、ユーザーが追加する事は出来ません。
|
|
変数名 | タイプ | 説明 |
btn | float | ボタンの入力状態をビットマップで保持 |
ret | float | APIの結果ステータスが書き込まれる |
loop1 | float | ループ用変数(ユーザーが自由に使用可能) |
loop2 | float | ループ用変数(ユーザーが自由に使用可能) |
w1 | float | ユーザーが自由に使用可能なワーク変数 |
w2 | float | ユーザーが自由に使用可能なワーク変数 |
w3 | float | ユーザーが自由に使用可能なワーク変数 |
w4 | float | ユーザーが自由に使用可能なワーク変数 |
p1 | float | ユーザーが自由に使用可能なワーク変数 |
p2 | float | ユーザーが自由に使用可能なワーク変数 |
p3 | float | ユーザーが自由に使用可能なワーク変数 |
p4 | float | ユーザーが自由に使用可能なワーク変数 |
g1 | float | ユーザーが自由に使用可能なワーク変数 |
g2 | float | ユーザーが自由に使用可能なワーク変数 |
g3 | float | ユーザーが自由に使用可能なワーク変数 |
g4 | float | ユーザーが自由に使用可能なワーク変数 |
x | float | APIの出力フィールド(加速度センサ等) |
y | float | APIの出力フィールド(加速度センサ等) |
z | float | APIの出力フィールド(加速度センサ等) |
r | float | 色の赤成分 |
g | float | 色の緑成分 |
b | float | 色の青成分 |
year | float | 年(APIの出力フィールド) |
month | float | 月(APIの出力フィールド) |
day | float | 日(APIの出力フィールド) |
hour | float | 時(APIの出力フィールド) |
minute | float | 分(APIの出力フィールド) |
vscnd | float | 秒(APIの出力フィールド) |
gLat | float | GPS緯度(APIの出力フィールド) |
gLon | float | GPS経度(APIの出力フィールド) |
gHt | float | GPS高度(APIの出力フィールド) |
gSat | float | GPS衛星数(APIの出力フィールド) |
gDil | float | GPS精度(APIの出力フィールド) |
wd | float | 幅(ユーザーが自由に使用可能) |
ht | float | 高さ(ユーザーが自由に使用可能) |
pi | float | 円周率 |
pscnt | float | パワーセーブまでのカウンタ値 |
※一部の変数はAPIの出力フィールドとしても使用されます。
|
|
変数名 | 長さ | 説明 |
s1 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s2 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s3 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s4 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s5 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s6 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s7 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s8 | 256 | 汎用文字列変数(ユーザーが自由に使用可能) |
s10 | 32000 | 汎用文字列変数(ユーザーが自由に使用可能) |
※一部の文字列変数はAPIの出力フィールドとしても使用されます。
|
|
最もシンプルなプログラム
$:23,"Hello world !\r\n",
|
出力結果
|
|
ループを用いた例
loop1 = 0
:LABEL
if loop1 >= 8 $return
$:21,loop1,
$:23,"\r\n",
loop1 += 1
$bak :LABEL
|
出力結果
Answer = 0.00000
Answer = 1.00000
Answer = 2.00000
Answer = 3.00000
Answer = 4.00000
Answer = 5.00000
Answer = 6.00000
Answer = 7.00000
|
|
|
FS001には、エアスクリプトを編集するためのエディタが搭載されています。
|
|
下記の3つの状態があります。
・スクリーンモード
・ラインエディタモード
・文字入力モード
起動時は、スクリーンモードとなり、プログラムが複数行表示されます。
スクリーンモードで行を上下に移動し、センターキーを押すと、ラインエディタモードになり、
選択された行を編集する事ができます。
ラインエディタモードでカーソルを左右に移動し、下向きキーを押すと文字入力モードとなり、
その位置へ文字入力が可能となります。
|
→ ←
|
スクリーンモード
|
|
→ ←
|
ラインエディタモード
|
|
→ ←
|
文字入力モード
|
|
各モードの機能
モード | 機能 |
スクリーンモード | 複数行を表示し、縦及び横にスクロール可能で、行単位での編集を行います。 |
ラインエディタモード | スクリーンモードで選択した行の内容を編集する事が出来ます。 カーソルを移動し、文字単位での削除や単語単位での削除などが可能です。 |
文字入力モード | ラインエディタモードでのカーソル位置に文字を挿入する事ができます。 |
|
|
スクリーンモードでは、ソースファイル(スクリプトソース)の複数の行(8行)が表示されます。
|
|
各行の表示は、計算式やif文などの一般的なコードはそのまま表示されますが、
API呼び出しは実際のコードではなく、そのAPIの機能を表現した文字列が表示されます。
これにより、スクリーンモードではプログラムの内容を理解しやすくなります。
スクリーンモードとラインエディタモードの表示の違いの例
スクリーンモードの表示(内容を表すテキストを表示) | ラインエディタモードの表示(コードをそのまま表示) |
Set color(255,0,0) | $:50,255,0,0, |
Draw circle(160,120,50) | $:51,160,120,50, |
Locate cursor(0,7) | $:22,0,7, |
Print text("Hello world!") | $:23,"Hello world!", |
APIの呼び出しはスクリーンモードの編集機能で、一覧から選択する事で、実際のコードが挿入され、
内容のテキストが表示されます。
|
|
|
3.2.2. 操作、キーボードの機能
|
≪
TOP
≫
|
|
キー | 機能 |
上 | 行を上へ移動 |
下 | 行を下へ移動 |
左 | 横スクロールしている場合、左へスクロール 横スクロールしていない場合は、終了メニューを表示。 |
右 | スクリーンモードでの編集機能メニューを表示。行追加や行コピー、行削除などを行う事が出来ます。 |
センター | 行を選択し、ラインエディタモードへ移行。 |
|
|
スクリーンモードで行を選択する(センターキーを押す)と、ラインエディタモードに移行します。
ラインエディタモードでは、行の文字列を入力したり削除したりできます。
|
|
|
3.3.1. 操作、キーボードの機能
|
≪
TOP
≫
|
|
キー | 機能 |
上 | 文字列編集メニューを表示。 文字列の削除や、プリセットワードの引用などが可能です。 |
下 | 文字入力モードへ移行。 |
左 | カーソルを左へ移動 |
右 | カーソルを右へ移動 |
センター | スクリーンモードへ戻ります。 |
|
|
文字入力モードでは、ソフトキーボードで任意の文字を入力する事ができます。
文字入力モードでは、加速度センサを利用しますので、本機を左右に傾ける操作が必要となります。
|
|
|
3.4.1. 操作、キーボードの機能
|
≪
TOP
≫
|
|
キー | 機能 |
上 | 文字種類の変更(上向き) |
下 | 文字種類の変更(下向き) |
左 | 文字入力のキャンセルし、ラインエディタモードへ戻ります。 |
右 | 押している間、本機を傾ける事により、セレクトを変更できます。短く押すと今傾いている方へ1つ動きます。 |
センター | 文字を確定し、挿入または上書きします。 |
|
|
キー | 機能 |
上 | 選択の変更(上向き) |
下 | 選択の変更(下向き) |
左 | キャンセルし、呼び出されたモードへ戻ります。 |
右 | セレクトを実行します。 |
センター | セレクトを実行します。 |
|
|
APIコード | 機能 | 内容 |
1 | Set time | $:1,year,month,day,hour,minute,second,
set time
|
2 | Power Control | $:2,bmp,0 or 1
Power Control
bmp = B0:GPS B1:I2C B2:3G_module B3:Audio B4:LED2 B5:LED3 B6:XBee
|
3 | Set timer to sleep | $:3,second1,second2,
Set timer to sleep
second1 : second to sleep
second2 : second to power off
previous second to sleep stored in (ret)
|
4 | LED Control | $:4,LED bmp, 0(OFF) or 1(ON)
LED Control
LED bmp = B0:LED2, B1:LED3
|
5 | Out port | $:5,length, address, data
Output port
|
6 | In port | $:6,length,address,
In port
stored in (ret)
|
7 | Play wave file | $:7,"wave file",
Play wave file
|
8 | Get time | $:8,
Get time
stored in (year,month,day,wday,hour,minute,vscnd)
count to power-save sotred in (pscnt)
|
9 | Power off | $:9,
Power off
|
10 | Get or Set system value | $:10,ID,v,
Get or Set system value
ID:system value and access
ID:0=get load time since boot
ID:1=get volume
ID:101=set volume
...
ID:102=set debug msg flag
v:value (if set)
return value stored in (ret)
|
11 | Get Field in string | $:11,string val,label,delimiter,
Get Field in string
status stored in (ret)
|
12 | Get Separated Field in string | $:12,string val,Separater,position,
Get Separated Field in string
status stored in (ret)
|
13 | Search word in string | $:13,string val,word,
Search word in string
status stored in (ret)
|
14 | String length | $:14,string val,
String length
length stored in (ret)
|
15 | Rec wave file | $:15,"wave file",
\r\Rec wave file
|
16 | Ref Error Log | $:16,cmd,idx,
Ref Error Log
cmd:0=ref cnt, 1=ref cntt
stored in (ret,x,y)
|
21 | Calculate and Print | $:21,"formula",
Calculate and Print
|
22 | Locate cursor | $:22,x,y,
Locate cursor
|
23 | Print text | $:23,"text",size,
Print text
size:1 or 2
|
24 | Print value | $:24,length after point ,val,
Print value
|
25 | Print value in hex | $:25,val,
Print value in hex
|
26 | Dialog box | $:26,"def",
Dialog box
def(top line) = Title
def(later) = val:tp,text
tp = 1:string,2:value,3:button,4:float 2,5:float 6
...
if tp is 3, val is return code.
|
27 | Write into file | $:27,"file name","out text"
Write into file
|
28 | Print date and time | $:28,
Print date and time
|
29 | Speech digit | $:29,"text",
Speech digit
|
30 | Select menu | $:30,x,y,"def",
Select menu
def = (item1)CR/LF(item2)CR/LF...
return code stored in (ret)
|
31 | Sleep | $:31,micro secnd,
Sleep
|
32 | Get button | $:32,flag,
Get button
flag : 0=immediate, 1=wait
stored in (btn)
B0:Up, B1:Left, B2:Center
B3:Right, B4:Down
|
33 | Set reference file | $:33,"file name",
Set reference file
|
34 | File manager | $:34,"initial directory",
File manager
|
35 | Input file to s10 | $:35,"file path",
Input file to s10
|
36 | Clear file contents | $:36,"file name",
Clear file contents
|
37 | Message box | $:37,"message",flag,
Message box
flag : 1=wait button(stored in (btn)), 0=no wait
|
38 | Select file contents | $:38,"file",
Select file contents
return code stored in (ret)
|
50 | Set color | $:50,r,g,b,
Set color
|
51 | Draw circle | $:51,cx,cy,r,
Draw circle
|
52 | Draw step circle | $:52,cx,cy,r step,
Draw step circle
|
53 | Draw rectangle | $:53,x,y,wd,ht,fg,
Draw rectangle
fg : 0=rectangle, else frame width
|
54 | Clear screen | $:54,
clear screen
|
55 | Display image | $:55,x,y,"image file",
Display image
|
56 | LCD Back light | $:56,flag,
LCD Back light
flag = 0(OFF), 1(ON), 2(Operate)
flag = 3(up), 4(down), 5(dsp state)
flag >= 10 : brightness = flag-10
|
61 | Serial | $:61,com,dir,"send data",
Serial communication
receive data stored (s1)
com=com number
dir=0:receive,1:send,11:set bau
|
62 | I2C | $:62,cmd,addr,reg,cnt,"send data",
I2C communication
receive data stored (s1)
cmd=0:receive,1:send
addr=complex address
cnt=com number
|
71 | XBee reference | $:71,
XBee reference
stored in (s1)
ret = 1:data
2:AT Response
3:other information
0:no frame
|
72 | XBee AT command | $:72,len,"text",
XBee AT command
|
73 | XBee send UDP | $:73,"text",
XBee send UDP
|
74 | Set IP | $:74,"target IP",remote port,local Port,
Set IP
|
81 | Get Accelerometer | $:81,
Get Accelerometer
stored in (x,y,z) |
82 | Get Compass | $:82,
Get Compass
stored in (x,y,z) |
83 | Get pressure | $:83,
Get pressure
press stored in (x)
temp stored in (y)
|
84 | Get Gyro | $:84,
Get Gyro
stored in (x,y,z) |
85 | Get GPS | $:85,
Get GPS
stored in (gLat,gLon) |
86 | Get ADC | $:86,ADC channel,
Get ADC
stored in (ret)
|
101 | Generate sin wave | $:101,cycle,millisecond,volume,
Generate sin wave
base cycle is 20ksps
|
102 | Detect Frequency | $:102,rec len,tolerance,holi level,
Detect Frequency
holi level:0 ~ 1.0
return code stored in (ret)
|
103 | Multi tone | $:103,cmd,ch,p1,p2,
Multi tone
cmd=1:Initial
2:Set Freq(p1:Hz)
3:Set Mag(p1:wd,p2:tm)
4:Make tone(p1:sample)
|
|
| |