Universal Device Network
HOME ソフトウェア製品 マイコン組込関連製品  組織  お問い合わせ
 
  組込簡易言語インタプリタ(Air-Script)

インデックス
1.  概要
  1.1.  組込プログラミングを簡単に
  1.2.  機能一覧
2.  プログラムの書式
  2.1.  文の種類
    2.1.1.  APIの呼び出しの結果を代入
  2.2.  定義済み変数
    2.2.1.  数値変数
    2.2.2.  文字列変数
  2.4.  プログラム例
    2.4.1.  プログラム例1
    2.4.2.  プログラム例2
3.  エディタ
  3.1.  エディタのモード構成
  3.2.  スクリーンモード
    3.2.1.  API内容表示
    3.2.2.  操作、キーボードの機能
  3.3.  ラインエディタモード
    3.3.1.  操作、キーボードの機能
  3.4.  文字入力モード
    3.4.1.  操作、キーボードの機能
  3.5.  メニューのキー操作
4.  API一覧


 1.  概要   TOP   

Air-Script(エア・スクリプト)は組み込み機器向けに開発されたインタプリタ言語です。
機器に搭載したSDカードなどのメディアにあるスクリプト言語ファイルを実行します。
変数を用いた複合的な計算や条件分岐が可能です。
また、機能APIによって、画面制御や通信、センサ制御、IOポート入出力、オーディオ制御などを行う事が可能です。


  1.1.  組込プログラミングを簡単に   TOP   
Air-Script でプログラミングを行う事で組込機器の制御が極めて簡単になります。
機器の初期化などの複雑な制御は内部プログラムが行いますので、ユーザーはIO信号の入力や それに対する条件分岐、画面、通信、センサ、音声制御などをシンプルに記述する事が可能です。


  1.2.  機能一覧   TOP   
 種別 機能 説明
 プログラム制御機能 条件分岐 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)
   



 2.  プログラムの書式   TOP   


1行に1つの文を記述します。
基本的に文は一番上の行から順に、下の行へ向かって実行されます。
文が分岐文である場合、実行順序は変更され、指定のラベルへ飛んでそこから下向きに実行されます。


  2.1.  文の種類   TOP   

 文の種類 説明 例
 機能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です。画面に表示する代わりに 変数に書き込みます。



  2.2.  定義済み変数   TOP   
このシステムでは、変数(数値、文字列)は予め定義されています。
スクリプト中で、ユーザーが追加する事は出来ません。


  2.2.1.  数値変数   TOP   
 変数名 タイプ 説明
 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の出力フィールドとしても使用されます。


  2.2.2.  文字列変数   TOP   
 変数名 長さ 説明
 s1 256 汎用文字列変数(ユーザーが自由に使用可能)
 s2 256 汎用文字列変数(ユーザーが自由に使用可能)
 s3 256 汎用文字列変数(ユーザーが自由に使用可能)
 s4 256 汎用文字列変数(ユーザーが自由に使用可能)
 s5 256 汎用文字列変数(ユーザーが自由に使用可能)
 s6 256 汎用文字列変数(ユーザーが自由に使用可能)
 s7 256 汎用文字列変数(ユーザーが自由に使用可能)
 s8 256 汎用文字列変数(ユーザーが自由に使用可能)
 s10 32000 汎用文字列変数(ユーザーが自由に使用可能)
※一部の文字列変数はAPIの出力フィールドとしても使用されます。


  2.4.  プログラム例   TOP   

  2.4.1.  プログラム例1   TOP   
最もシンプルなプログラム
$:23,"Hello world !\r\n",





出力結果
Hello world !










  2.4.2.  プログラム例2   TOP   
ループを用いた例
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




 3.  エディタ   TOP   

FS001には、エアスクリプトを編集するためのエディタが搭載されています。


  3.1.  エディタのモード構成   TOP   
下記の3つの状態があります。
・スクリーンモード
・ラインエディタモード
・文字入力モード

起動時は、スクリーンモードとなり、プログラムが複数行表示されます。
スクリーンモードで行を上下に移動し、センターキーを押すと、ラインエディタモードになり、 選択された行を編集する事ができます。
ラインエディタモードでカーソルを左右に移動し、下向きキーを押すと文字入力モードとなり、 その位置へ文字入力が可能となります。

起動

終了

スクリーンモード

ラインエディタモード

文字入力モード

各モードの機能
 モード 機能
 スクリーンモード 複数行を表示し、縦及び横にスクロール可能で、行単位での編集を行います。
 ラインエディタモード スクリーンモードで選択した行の内容を編集する事が出来ます。
 カーソルを移動し、文字単位での削除や単語単位での削除などが可能です。
 文字入力モード ラインエディタモードでのカーソル位置に文字を挿入する事ができます。


  3.2.  スクリーンモード   TOP   
スクリーンモードでは、ソースファイル(スクリプトソース)の複数の行(8行)が表示されます。


  3.2.1.  API内容表示   TOP   
各行の表示は、計算式や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.  ラインエディタモード   TOP   
スクリーンモードで行を選択する(センターキーを押す)と、ラインエディタモードに移行します。
ラインエディタモードでは、行の文字列を入力したり削除したりできます。


  3.3.1.  操作、キーボードの機能   TOP   
 キー 機能
 上 文字列編集メニューを表示。
 文字列の削除や、プリセットワードの引用などが可能です。
 下 文字入力モードへ移行。
 左 カーソルを左へ移動
 右 カーソルを右へ移動
 センター スクリーンモードへ戻ります。


  3.4.  文字入力モード   TOP   
文字入力モードでは、ソフトキーボードで任意の文字を入力する事ができます。
文字入力モードでは、加速度センサを利用しますので、本機を左右に傾ける操作が必要となります。

  3.4.1.  操作、キーボードの機能   TOP   
 キー 機能
 上 文字種類の変更(上向き)
 下 文字種類の変更(下向き)
 左 文字入力のキャンセルし、ラインエディタモードへ戻ります。
 右 押している間、本機を傾ける事により、セレクトを変更できます。短く押すと今傾いている方へ1つ動きます。
 センター 文字を確定し、挿入または上書きします。


  3.5.  メニューのキー操作   TOP   
 キー 機能
 上 選択の変更(上向き)
 下 選択の変更(下向き)
 左 キャンセルし、呼び出されたモードへ戻ります。
 右 セレクトを実行します。
 センター セレクトを実行します。


 4.  API一覧   TOP   

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)



 


Copyright© 2019 Universal Device Network All Rights Reserved.