クリエイター手抜きプロジェクト[562]IoT IchigoLatte編 データを大きな文字で表示する(1)
── 古籏一浩 ──

投稿:  著者:



今回は、計測したデータを大きな文字で表示してみます。遠くから見ても分かるように、値を大きな文字で表示したいことはあります。ただ、IchigoLatteは大きな文字で表示する命令はないので、関数を自作する必要があります。

今回は、大きな文字を表示する処理について説明し、次回で大きな文字を表示する関数の作成を行います。




まず、普通の文字でセンサーの値を表示するには、以下のようになります。これは今まで何度も出てきたlog()を使います。

while(1){
cls();
log(ana(2));
sleep(1000);
}

cls()は、Clear Screen(クリアスクリーン:画面消去)を意味する命令です。ここでは画面を消去した後で、一番上に表示するようにするためにcls()を使っています。

画面の一番上でなく、任意の座標に表示したい場合はlc()を使います。lc()は最初のパラメーターにX座標、2番目のパラメーターにY座標を指定します。

IchigoLatteの画面は横が32文字、縦24行なので、座標値はこの範囲内での値を指定します。

次に数値を大きな文字で表示します。最初にも書きましたが、IchigoLatteには大きな文字を表示する命令はありません。しかし、IchigoLatteはフォントデータ(文字の形状データ)を読み出すことができます。これを利用することで、文字を大きく表示することができます。

フォントデータはIchigoLatteのメモリ上にあり、8バイトで1文字分になります。IchigoLatteのフォントは8×8ドットで構成されています。1バイト=8ビットなので、1ビットが文字のひとつの点に対応します。

例えば、Aの文字であれば以下のようになります。■が1、□が0のビットになります。

□□□□□□□□
□□□■■■□□
□□■□□□■□
□□■□□□■□
□□■■■■■□
□□■□□□■□
□□■□□□■□
□□□□□□□□

フォントデータがメモリ上のどこに入っているかを調べるには、mem()を使います。mem()はフォントデータやフリーエリアなどのアドレスを返したり、指定したアドレスに値を書き込む命令です。

フォントデータのアドレスは、以下のように取得することができます。

var adrs=mem("f");

返されるアドレスは、文字コード0番のフォントデータのアドレスになります。IchigoLatteでは合計256文字のフォントデータがあります。表示する文字のコードが分かれば、以下のようにして格納されているフォントデータのアドレスを計算することができます。

以下のプログラムでは、変数cに文字コード(0の文字コード)を入れています。

var adrs=mem("f");
var c=0x30;
adrs=adrs+c*8;

これで0のフォントデータのアドレスが分かりましたので、後は8バイト分のデータを読み出し文字を表示します。

メモリから1バイト読み出したら、1ビットずつ調べていきます。ここで論理積(AND)の出番です。16進数で80との論理積を取って80ならOを表示、0なら空白を表示します。

var adrs=mem("f");
var c=0x30;
adrs=adrs+c*8;
cls();
var y=0;
while(y<8){
var x=0;
var bit=mem(adrs);
while(x<8){
lc(x,y);
if(bit&0x80){
log("O");
}else{
log(" ");
}
bit=bit<<1;
x=x+1;
}
adrs=adrs+1;
y=y+1;
}

論理積は「if(bit&0x80){」の部分です。0以外であれば条件式は真になる(条件を満たす)ので、{以後に続く内容が処理されます。条件を満たさなかった場合はelse以降に続く内容が処理されます。

1ビット分処理したら、ビットデータをずらします。(ビットデータをシフト)「bit=bit<<1;」とすると値が1ビット左にずれます。左にずれるというのは、以下のようになるわけです。

□□□■■■□□
  ↓
□□■■■□□□

このように1ビットずつずらしていき、Oの文字を表示するかどうか処理していきます。このサンプルは数字の0しかい表示できません。

「var c=0x30;」の値を変えることで、任意の文字を表示できます。また、ユーザーからの入力値に応じて文字を表示する場合は、「var c=0x30;」を「var c=input();」に変更してください。入力した文字コードに対応した文字が大きく表示されるようになります。

Oの文字ではなく■を表示することもできます。これについては次回説明します。


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


2018年11月20日以降になると、Mac版のESTKでスクリプトが実行できなくなるという謎の現象が発生。(ESTKはAdobe PhotoshopやInDesignなどでスクリプトの開発・デバッグを行う開発ツール)

私の環境でも、当日発生しました。アプリケーションの終了や、OSの再起動、再インストールなどを試みても駄目。同じような症状は過去にもあったものの、今回は手強い。

で、検索するとスタックオーバーフローとアドビフォーラム(いずれも英語)に、同じ症状が発生して困っているとの書き込みが。時間を見ると2時間前。

そこから数時間、解決策が示されることなく、同じような症状があちこちで発生。Mac版のみ発生し、Windowns版では発生しない。どうにかこうにかやっているうちに、アドビフォーラムで原因と解決策が掲載。

原因はミリ秒と秒を間違えてしまい、数値がオーバーフローしたために発生したみたい。その日付(週)が2018年11月20日だったということです。

Adobe MAXに合わせたように発生したので、何かあるのかと思いきや単なるバグ(勘違いミス)。ESTK CS5〜CCまで、アプリケーションの中身を表示して11BTBackend.jsxファイル内の604800000を1542783918 + 604800000に書き換えれば直るとのこと。

ただ、一部書き換えできなかったり、書き換えても動かない環境もありますので、正式なパッチを待つのがいいのかもしれません。あまりよい方法ではありませんが、日付を2018年11月19日などに設定すれば使えるようにはなります。

・Extendscript Toolkit debugger fails on Mac: Can't start debug session
https://forums.adobe.com/thread/2563241


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


・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936

[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/


・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591

https://www.amazon.co.jp/dp/4844397605


・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP

http://digiconcart.com/dccartstore/cart/info/2561/218591


・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/


・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/


・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/


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


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