クリエイター手抜きプロジェクト[621]IoT Orange pico編 グラフィック描画とスクリーンセーバー
── 古籏一浩 ──

投稿:  著者:



今回は、Orange pico(Orangino)の標準的なグラフィック描画機能を使って、スクリーンセーバー的なものを作ってみます。

Orange picoにはテキスト画面とグラフィック画面があります。これらは合成されて表示されます。テキスト画面とグラフィック画面は独立していますので、テキスト画面に文字を表示しても、グラフィック画面には影響がありません。逆も同様で、グラフィック画面に何か描画しても、テキスト画面には影響がありません。

Orange picoのグラフィック画面のサイズは320×200ドット1色です。TFT液晶モジュールを装着すると、グラフィック画面のサイズは320×240ドット65536色表示が可能です。ここでは、通常の320×200ドット1色で説明していきます。





Orange picoのグラフィック描画命令には、以下のものがあります。

 点を描画 pset X座標 Y座標 色
 線を描画 line X1座標 Y1座標 X2座標 Y2座標 色
 円を描画 circle 中心X座標 中心Y座標 半径 色
 楕円を描画 ellipse 中心X座標 中心Y座標 半径 横の係数 縦の係数 色

色は単色なので0が黒、1が白になります。楕円を描画するellipseの係数は1以上の整数値になります。値が大きくなると横の係数の場合は、縦長の楕円になります。縦の係数の場合は、横長の楕円になります。なお、Orange BASIC ver 1.05では、係数に0を指定するとハングアップしてしまうので注意して下さい。

それでは、それぞれの命令を使って、スクリーンセーバーを作ってみましょう。まず、画面を消去します。画面の消去はclsを使います。以下のように入力すると、テキスト画面とグラフィック画面の両方が消去されます。

cls

テキスト画面のみ消去する場合は以下のように1を指定します。

cls 1

グラフィック画面のみ消去する場合は2を指定します。

cls 2

グラフィック画面に描画する場合は、プログラムを作らなくてもダイレクトモードで命令を入力しても構いません。以下のように入力すると、座標(100,50)に点が描画されます。

pset 100,50,1

点を表示する位置と色をランダムに変えていけば、スクリーンセーバーっぽくなります。ランダムな値、つまり乱数を求めるにはrnd()を使います。rnd()のパラメーターに、求めたい乱数の最大値+1を指定します。0〜9までの乱数を求めるのであれば、rnd(10)と指定します。

スクリーンセーバーは、escキーが押されるまで無限に点を描画します。無限に繰り返す方法はいくつかありますが、一番手軽なのはgotoで指定した行番号に処理を移してしまうことです。goto 20とすれば行番号20に処理が移ります。

ランダムに点を打つ、スクリーンセーバーのプログラムは、以下のようになります。

10 cls
20 x=rnd(320)
30 y=rnd(240)
40 pset x,y,rnd(2)
50 goto 20

点じゃなくて線の場合は、以下のようになります。点を描画するか、線を描画するかだけの違いです。

10 cls
20 x1=rnd(320)
30 y1=rnd(240)
40 x2=rnd(320)
50 y2=rnd(240)
60 line x1,y1,x2,y2,rnd(2)
70 goto 20

円の場合は、以下のようになります。

10 cls
20 x=rnd(320)
30 y=rnd(240)
40 r=rnd(320)
50 circle x,y,r,rnd(2)
60 goto 20

楕円の場合は、以下のようになります。

10 cls
20 x=rnd(320)
30 y=rnd(240)
40 r=rnd(320)
50 ax=rnd(10)+1
60 ay=rnd(10)+1
70 ellipse x,y,r,ax,ay,rnd(2)
80 goto 20

ここまで実際に動かしてみると、速すぎて何が何だかよくわかりません。そこで少しウェイトを入れる事にしましょう。ウェイトはpauseを使います。pauseの後に、待ち時間をミリ秒で指定します。pause 100なら100msecのウェイトになります。

10 cls
20 x=rnd(320)
30 y=rnd(240)
40 r=rnd(320)
50 ax=rnd(10)+1
60 ay=rnd(10)+1
70 ellipse x,y,r,ax,ay,rnd(2)
80 pause 100
90 goto 20


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

何年もかかって書いていた本の原稿が、ようやくできあがりました。長すぎて3冊に分割されてしまいましたが、何とか出版できそうです。すでに出版されている2冊と合わせると1700ページ超(出版できずダウンロードのみとなってるのと合わせると2400ページくらい)。

これでも書き足りないのですが、出版システムのページ数の制限でこれ以上書けません。さすがに無限に書き続けることはできないので、どこかで妥協しないと。

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram

・8K/4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/