• 検索結果がありません。

LIST

サンプルに磁気センサの数値を 1 秒おきに表示していく プログラムを載せます。

Lin.Acc.Y: 25 m/s2 Lin.Acc.Z: 26 m/s2 MotionX: 27

MotionY: 28 MotionZ: 29 Game rot.X: 30 Game rot.Y: 31 Game rot.Z: 32

Mag. uncal.X: 33 uT Mag. uncal.Y: 34 uT Mag. uncal.Z: 35 uT Gyr. uncal.X: 36 Gyr. uncal.Y: 37 Gyr. uncal.Z: 38 Step count: 39 Step detect: 40

 サンプルに磁気センサの数値を 1

秒おきに表示していく

Sensor Off End

 他のセンサといえば、GPS

センサがあります。

命令:GPS

書式:GPS ON, GPS OFF

説明:GPS(Global positioning System receiver)の ON/OFF

命令:GET`LOCATION 書式:GET`LOCATION

lat,lon,alt[,bearing,accuracy,speed,time[,provider$]]

説明:GET`LOCATION は、位置デバイスから得られるデータ を返します。ここで位置デバイスとは、GPS に限らず、地理

上のデータを返すサービス一般をさします。GPS は事前にス

イッチオンしてから使ってください。

コメント:この命令は Android

端末だけ対象です。

(例)

GET`LOCATION x,y,a

サンプルプログラム

 センサを使うので PC のひとたちはごめんなさい。楽しめ

ません。Android でお楽しみのひとたちは、これをネタにし

て色々楽しんでください。ここで使っているグラフィック

ス関係の命令は次章で説明します。

磁場測定

 リアルタイムにグラフを表示して、最終的にデータを ファイルに保存するプログラムです。

 センサを備えてれば温・湿度や気圧も測れますね。加速

度計もあるので振動解析もできます。ただ測定間隔をどこ

まで狭められるか、センサの追従性がどの程度か、細かい

諸元はわかりません。数値として表示されてるからといっ

て、その値が正しいのかは判断できませんから。汎用携帯

端末のセンサなので、ちゃんとした計測機器ではなく、

ツール程度と受け止めていただきたいと思います。

 プログラムの基本は SensorOn して、ループで回して、終

了したら SensorOff するというものです。ループの中で

Delay 命令(または Pause 命令)を入れて測定時間間隔を決め ています。

 加速度計はわりとキビキビ反応しました。手でカシャカ

シャ動かすとそれに応答してます。まあ、手で振る程度の 確認なのでそんなに早い振動まで試せていません。携帯端 末として使う範囲ですし、せいぜい 0.01 秒(=100Hz)程度が 信頼できる値じゃないでしょうか。ですのでエンジンや モーターの振動とかは観察できるかな?

(X11-BASIC)

' jibanyan3x.bas

' Display Gauss Sensor xyz with Array form and FileI/O

Dim T$(2048), GMX(2048), GMY(2048), GMZ(2048) ! 配列を 2048個分確保 Count = 32 ! 測定個数を仮に初期値32個にしておく

dt = 0.5 ! 測定時間間隔

YX0 = 0 ! プロット開始初期値x YY0 = 0 ! プロット開始初期値y YZ0 = 0 ! プロット開始初期値z filname$ = "gausens.dat"

' センサのスイッチを ON Sensor On

' 画面設定 ShowPage Pause 1

Get_Geometry 1, bx, by, Width, Height If Height > 320

' big screen

brafan = Height / 5 inpfac = 0.75

inphf = 0.8 depth = 6 density = 5 Else

' small screen

brafan = Width / 3.2 inpfac = 1

inphf = 1 depth = 4 density = 3 Endif

Clearw

' 座標系の設定。上限2048個として画面の横幅を測定個数にする。

If Width > 2048 Then Count = 2048

Else

Count = Width Endif

' X軸の描画と測定条件の表示 Y0 = Height / 2

Line 0, Y0, Width, Y0

Wsize$ = "Width=" + Str$(Width) + " Height=" + Str$(Height) + " dt="

+ Str$(dt)

Deftext 0, 0.1, 0.1, 0 LText 0, 0, Wsize$

' センサーの値をグラフィクス For i = 1 To Count

Delay dt ! センサ on から起動するまで時間かかることがあるので先に Delay を置いた。

Disp$ = Str$(i) + "/" + Str$(Count) White = Get_Color(64000, 64000, 64000) Color White

Text 0, 25, Disp$ ! 更新するテキストは"Text"命令を使うのが便利 T$(i) = Time$

' chX

GMX(i) = Sensor(10) YX1 = GMX(i)

Red = Get_Color(64000, 0, 0) Color Red

Line i - 1, (YX0 * 5) + Y0, i, (YX1 * 5) + Y0 YX0 = YX1

' chY

GMY(i) = Sensor(11) YY1 = GMY(i)

Green = Get_Color(0, 64000, 0) Color Green

Line i - 1, (YY0 * 5) + Y0, i, (YY1 * 5) + Y0 YY0 = YY1

' chZ

GMZ(i) = Sensor(12) YZ1 = GMZ(i)

Blue = Get_Color(0, 0, 64000) Color Blue

Line i - 1, (YZ0 * 5) + Y0, i, (YZ1 * 5) + Y0 YZ0 = YZ1

ShowPage Next i

' センサのスイッチを OFF します。

Sensor Off

' 色を戻しておく

White = Get_Color(64000, 64000, 64000) Color White

' 測定データを保存するか

Print "<< Measure Complete >>"

Input " Data Save (Y/N) "; Ans$

If Ans$ = "Y" or Ans$ = "y" Then Open "O", #1, filname$

For i = 1 To Count

Print #1, T$(i); ","; GMX(i) Using "+##.##"; ","; GMY(i) Using

"+##.##"; ","; GMZ(i) Using "+##.##"

Next i Close #1 Endif

End

(Result)

重力センサでコロコロ

 Android の Sensor()命令の応用です。Android の傾きセン サ値を読んで、端末の傾いた方向へ線が伸びるようにして ます。

(X11-BASIC)

' ballcororox.bas ' 2015/12/23

' グラフィクス画面設定 ShowPage

Pause 1

Get_Geometry 1, bx, by, Width, Height If Height > 320 Then

' big screen

brafan = Height / 5 inpfac = 0.75

inphf = 0.8 depth = 6 density = 5 Else

' small screen

brafan = Width / 3.2 inpfac = 1

inphf = 1 depth = 4 density = 3 Endif

Clearw

' Print "-Width,Height = "; Width; ","; Height x0 = Width / 2

y0 = Height / 2 Sensor On

Grau = Get_Color(64000, 64000, 64000) ! お好みの色で Color Grau

Do

MouseEvent x If x > 0 Break Endif

dx = Sensor(6) dy = Sensor(5) x1 = x0 + dx y1 = y0 - dy If x1 < 0 Then

x1 = 0

Else If x1 > (Width - 1) Then x1 = (Width - 1)

Endif

If y1 < 0 Then y1 = 0

Else If y1 > (Height - 1) Then y1 = (Height - 1)

Endif

Line x0, y0, x1, y1 x0 = x1

y0 = y1 ShowPage Delay 0.2 Loop

Sensor Off Stop

'Quit End

グラフィクス描画

 グラフィック描画するのに必要な命令を解説します。こ こでは、これだけ知ってれば結構なことができるという命 令を紹介します。少なくとも、この章に掲載するサンプル プログラムのグラフィクス関連の命令はこれだけでまか なっています。

 パソコン版の人ならわかりやすいのですが、X11-BASIC は

起動するとテキスト文字を入力するプロンプトが表示され

ます。この画面を X11-BASIC では、インタラクティブモー ドと呼んでいます。これに対してグラフィックスウィンド ウは、グラフィックコマンドが実行されると自動的に開か れます。Android 版の X11-BASIC を使ってる人は、Android OS がシングルウィンドウなので、テキストでやりとりする インタラクティブモードの上にグラフィックスウィンドウ が被さってる状態だと考えていただければよいと思います。

ですのでグラフィックス命令がないプログラムでなら、テ

キストコンソール下だけでプログラムを実行されます。

 標準状態なら、640x400 ドットの画面上に Line や Circle

や Box を描画ます。Get_Color()と Color 命令を使えば、総

天然色で出力することができます。実行したグラフィック

ス命令は、ShowPage コマンド実行の後で画面に反映されま

す。逆に言えば、ShowPage が実行されないと画面上は特に

変化がありません。これによって高速なアニメーションを 可能にします。

 ビットマップによるグラフィックス表示を可能にするた め、文字列に矩形のグラフィック領域の内容を入れたり、

文字列からグラフィック画面にビットマップデータを表示 させるコマンド Get、Put があります。Get、Put で使用され るファイル形式は、標準ビットマップのため、外部で作成 したアイコンを使用することができます。透過性やアル ファチャンネルもサポートされてます。ちなみにグラ

フィックス画面には日本語文字はありません。英語だけに なります。

命令:Openw 書式:Open n

説明:グラフィックウィンドウを開きます。最大で 16

枚の

ウィンドウを開くことができます。グラフィクスの出力は すべて、最後に開いたウィンドウに描かれます。Openw は複

数のウィンドウを切り替えることに使えます。最初に開く

ウィンドウはデフォルトでは自動でウィンドウ1になりま す。

命令:Closew

書式:Closew [<num>]

説明:グラフィックウィンドウを閉じます。数字が与えら れれば、その番号が付与されているウィンドウを閉じます。

次のグラフィックコマンドが実行されるとウィンドウは再

び開かれます。

命令:Clearw

書式:Clearw [<num>]

説明:グラフィックウィンドウをクリアします。数値が与 えられれば、それに対応する番号のウィンドウをクリアし ます。

命令:ShowPage 書式:ShowPage

説明:ShowPage はグラフィクス出力を画面に反映させます。

通常、ShowPage を実行しない限りグラフィクス出力はウィ

ンドウ上に反映されません。ただし、TomTom

端末は即座に 反映されるようになってます。

命令:Get_Geometry

書式:Get_Geometry <winnr>, <varx%>, <vary%>, <varw

%>, <varh%>

説明:Get_Geometry はウィンドウサイズを返します。この コマンド実行前にウィンドウは開かれていなければなりま せん。

(例)

Get_Geometry 1, bx, by, Width, Height

関数:Color_RGB()

書式:c% = Color_RGB(r, g, b [, a])

説明:Color_RGB()は色相を定義する値を返します。RGB

は 0(暗)から 1.0(明)までです。返り値は環境のグラフィク ス環境に依存します。8

ビットカラーセル、またはフリーセ

ルなしの場合、色を指定した内容に最も近く設定でします。

オプションパラメータ a は、アルファ(0...1)値です。

(例)

yellow = Color_RGB(1,1,0) Color yellow

関数:Get_Color()

書式:<num-result> = Get_Color(<red-value>,

<green-value>, <blue-value>)

説明:Get_Color()は RGB で表現される色相値を返します。

数値は 0(暗)から 65535(明)までです。ここで定義した色相

を COLOR

へ渡します。

注:この関数はなるだけ使わないで、なるだけ Color_RGB()を使うようにして ください。

(例)

yellow = Get_Color(65535,65535,0) Color yellow

命令:Color

書式:Color <foreground-color> [, <background-color>]

説明:グラフィックウィンドウの前面色を指定します。オ プションで背景色も指定できます。通常 Color 命令は

Color_RGB()関数とペアで使います。

(例)

yellow = Color_RGB(1,1,0) blue = Color_RGB(0,0,1) Color yellow,b lue

命令:Line

書式:Line <x1>, <y1>, <x2>, <y2>

説明:座標(x1, y1)から(x2, y2)への直線を描画します。

線の太さなどのパラメータは Defline で定義できます。

(例)

Line 0, 0, 639, 199

命令:Circle

書式:Circle <x>, <y>, <r> [, <w1>, <w2>]

説明:円を描画します。x と y は円の中心座標、r は円の半

径です。オプションで円弧にすることもできます。w1 は描 画開始角度で w2 が終了角度です。

(例)

Circle 100, 100, 50

命令:Deftext

書式:Deftext flag%, width, height, angle

説明:Ltext 命令で使われるラインフォントの設定をします。

スタイル、回転、サイズを定義します。色は Color で、線 種は Defline で定義してください。

flag% : テキストスタイル 0=normal 1=monospace angle : 回転角

width and height : パーセンテージで指定 (100%が 100 Pixel フォントにな ります)

(例)

Deftext 0, 0.1, 0.1, 270

命令:Ltext

書式:Ltext x,y,t$

説明:座標 x, y にテキストを描画します。Ltext コマンド はライン描画テキストです。フォントスタイルや線種は Deftext や Defline 命令で定義してください。

(例)Ltext 10, 10, "test"

命令:Text

書式:Text x, y, t$

説明:t$で与えられるテキスト(Bitmap Font)文字を座標 x,

y に描画。テキスト内容を更新する処理のときはこれを使う

ほうが便利。

(例)Text 0, 25, "test"

(X11-BASIC)

' Show the complete ASCII Font Setfont "*writer*18*"

Color Get_Color(65535, 10000, 10000) For x = 0 to 15

For y = 0 to 15

Text 320 + 16 * y, 20 + 24 * x, Chr$(y + 16 * x) Next y

Next x Showpage End

サンプルプログラム

グラフのテンプレート

 典型的な時系列グラフのテンプレート(ひな型)として、

ロジスティック写像の時系列グラフを描画します。

(X11-BASIC)

' timeseriesx.bas Count = 100

A = 3.8

' 描画ウィンドウの表示 Openw 1

' 描画セッションの開始