福野泰介の一日一創 - create every day

歩き回れて49,800円のVR、Oculus Questが到着。良いです。
複数ある外カメラによってモノクロですが外を見ることもできるので実質メガネ!(過言)

2880x1600のOLEDの画質は良く、ヘッドセットの装着感もよし、目の間の距離調整機構もあって、快適。
WebVR対応ブラウザが入っているので、アプリづくりも手軽にできます!
リフレッシュレートは72Hzとパフォーマンスに合わせて控えめになっていますが、スマホの60Hz以上なので十分あり。


test with React VR
アプリ起動して、見渡している様子。スマホにミラーリングできるので、そのまま画面録画。
Oculusと同じFacebook社による「React 360」なので安心。
サンプルを混ぜて、静的ページとして生成しました。


デモ、3枚目の写真は、京都のお寺、7,250円で買えちゃうお手軽360度カメラで撮影したものです。(最高画質、40M画素なのでもっと画質が高い変換方法模索予定)


Oculus Goと比べて、大きくなった箱。


高級感あって収まりも良し。

2016年に作った巨大jig.jpロゴも、アプリ一切触ることなく歩いて見渡せるようになりました。
VR jig.jp BIG logo - A-Frame

自分だけの空間創り放題、公開し放題。これはかなり良いですよ!
Oculus Quest

高専の情報系の学科にはOSを学ぶ授業があります。自分で使って作って遊んでみるのが近道です。

IchigoJamへの要望に応えるため、一部はIchigoJam OSの外での実装を検討中。 その手段として、マシン語やmrubyなどからの呼び出しに便利なAPI提供を行う予定にしています。公開時はAPIテーブルとして固定のアドレスに置くことになりますが、先行してAPI直接呼び出しする実験方法を紹介します。
* IchigoJam 1.3.2b11専用なのでご注意ください(他のファームウェアだと停止します)


(IchigoJam as an OS: rnd API example)

ゲームでは欠かせないランダム(rnd)はこんな読み出せます。

[0]=#4700:?USR(#800,#11B9) 8423

アドレス #11B8 に、rnd関数が入っていて、+1 した #11B9 でThumb呼び出しすることで使います。返り値はR0に格納されるので、マシン語はシンプルにGOTOするだけ。

GOTO R0

inkeyは#A15、clsは#196D、wait1は#219です。

パラメーターを渡すAPI、画面表示のputcは、こんな風に使います。(UARTのみのputcは#A51)

LET[0],#4900,#4708,#18BD,0:U=USR(#800,ASC("A"))

マシン語は、このように呼び出し先アドレスをR1にセットしています

R1=#18 R1=R1<<8 R1+=#BD GOTO R1

パラメータを一つ受け取るAPIとして、数を出力するputnum(#18E1)もおもしろいです。

LET[0],#4900,#4708,#18E1,0:U=USR(#800,12345) 12345

RNDを使った応用例として画面をランダムに埋め続けるプログラムを、ステップバイステップで解説します。

'R3=#900 R3=9 R3=R3<<8 R3=R3+R1 [R3]=R0 RET

asm15でアセンブルするか、マシン語表を使ってハンドアセンブル

POKE#700,9,35,27,2,91,24,24,112,112,71 ?USR(#700,65)

Aが画面左上(#900)に表示されます。

rndを使って、ランダムなキャラを出します。

PUSH {LR,R4} 'R4=#900 R4=9 R4=R4<<8 R4=R4+R1 'R2=#11B9 R2=#11 R2=R2<<8 R2+=#B9 GOSUB R2 'RND [R4]=R0 POP {PC,R4}

関数内で更に関数を呼び出す場合、戻り先LRをPUSHで保存しておき、POPで戻しましょう。

POKE#700,16,181,9,36,36,2,100,24,17,34,18,2,185,50,144,71,32,112,16,189 ?USR(#700,0)

ランダムな場所に出します。

PUSH {LR,R4-R6} 'R6=#11B9 (RND) R6=#11 R6=R6<<8 R6+=#B9 'R4=#900 R4=9 R4=R4<<8 R4=R4+R1 GOSUB R6 'RND R1=#FF R0&=R1 R5=R4+R0 GOSUB R6 'RND [R5]=R0 POP {PC,R4-R6}

R3の割り算を使って、%(32*24)を実現して画面全体ランダム表示。
捨て身の無限ループなので、電源を切るまで停止することはできません。戻ってこないのでPUSHもなし。

'R6=#11B9 (RND) R6=#11 R6=R6<<8 R6+=#B9 'R7=32*24 R0=32 R7=24 R7*=R0 'R12=R3 (UDIV) R12=R3 'R4=#900 R4=9 R4=R4<<8 R4=R4+R1 @LOOP GOSUB R6 'RND R1=R7 GOSUB R12 'UDIV R0=R1 R5=R4+R0 GOSUB R6 'RND [R5]=R0 GOTO @LOOP


POKE#700,17,38,54,2,185,54,32,32,24,39,71,67,156,70,9,36,36,2,100,24,176,71,57,70,224,71,8,70,37,24,176,71,40,112,247,231 ?USR(#700,0)

正式実装をお楽しみに!

see also
連載、IchigoJamではじめる、Armマシン語入門

アルゴリズムの工夫や、マシン語化で速くなることを体験しました。 今回、それぞれ実測してみましょう。

まずはシンプルに引き算を続けるBASIC版から、CLTとTICK()を使って計測します。コンピューターくんへの課題は「10000/7」とします。

10 N=10000 20 M=7 25 CLT 30 A=0 40 N=N-M:IF N>=0 A=A+1:CONT 50 N=N+M 55 ?TICK() 60 ?A;"...";N RUN 370 1428...4

BASICでは369、TICK()は1秒間に60進むので、6.1秒です。(IchigoJam上で10倍して60で割ると小数1位まで計算できます。また、IchigoJamのバージョンによって数は変わります)

?3690/60 61

BASIC筆算版はどのくらい速いでしょう?

10 N=10000 20 M=7 25 CLT 30 A=0 40 FOR I=10 TO 0 STEP -1 50 L=M<<I 60 IF N>=L N=N-L:A=A+1<<I 70 NEXT 75 ?TICK() 80 ?A;"...";N RUN 5 1428...4

なんと、0.08秒(5/60秒)。73倍も速くなってます。アルゴリズムって大事ですね。

続いて、マシン語の単純ループ版。

POKE#700,7,33,2,70,0,32,1,48,82,26,252,218,2,56,81,24,112,71 OK CLT:U=USR(#700,10000):?TICK() 0

0、つまり1/60秒未満。この時点で単純ループ版でもBASIC筆算版を上回る速度がでていることがわかります。 ただ、0ではどのくらい速いかわからないので、ループを使います。

CLT:FORI=1TO1000:U=USR(#700,10000):NEXT:?TICK() 283

1000回で283、4.7秒でした。・・・が、待ってください。BASICの処理で時間がかかっているかもしれません。そこで何もせず帰ってくるだけのマシン語(=RET #4770)でも測ります。

[0]=#4770:CLT:FORI=1TO1000:U=USR(#800,10000):NEXT:?TICK() 264 ?283-264 19

やはり、ほとんどがBASICの処理時間でした。差分は19、0.31秒/1000回。1回あたり310マイクロ秒(=0.31ミリ秒)、BASIC版の2万倍も速いことがわかります。

次に、マシン語筆算版を計測してみます。

POKE#700,7,33,16,181,2,70,0,32,1,35,27,4,12,70,92,67,162,66,1,219,18,27,24,68,91,8,247,209,17,70,16,189 OK CLT:FORI=1TO1000:U=USR(#700,10000):NEXT:?TICK() 264 ?264-264 0

速すぎて、差分が0になってしまいました。ループ回数を10倍の10000回にして比較します。

[0]=#4770:CLT:FORI=1TO10000:U=USR(#800,10000):NEXT:?TICK() 2643 CLT:FORI=1TO10000:U=USR(#700,10000):NEXT:?TICK() 2648 ?2648-2643 5 ?5*1000/60 83

10000回で0.083秒。つまり1回あたり8.3マイクロ秒。ループ版から37倍、速くなりました。
BASIC筆算版の約1万倍速と、高速化具合は似たようなものですね。

まとめ
1. アルゴリズムによる速度差は環境を変えても変わらない(工夫の価値)
2. 遅いアルゴリズムでも言語や環境を変えるとなんとかなってしまう(力技)

いくらコンピューターが高速化しようとも、同じ環境上でいかにアルゴリズムの工夫で高速化できるかが、電気代やサーバー台数など、かかる費用に直結します。 また、同じ機能のアプリなら、サクサク快適に動く方がうれしいですよね? これが流行る流行らないの決定的な差になったりします。アルゴリズム、大事。

アルゴリズムなど理論ばかり見ていてもどう使えるのかイメージが沸かずつまらないし、プログラミング言語の文法だけ学んでもアルゴリズムが弱いとせっかくのパワーが活かせません。

IchigoJam BASICのスピードは、アルゴリズム変更が人間にとってリアルにコンピューターを体感できる速度域。入門時の学習がむしろ、手軽で速いはず。

アルゴリズムやコンピューターを学ぶコツをさえ身に着けたら、数億倍速い環境が待ってます。
世界中にある様々な課題、新しい問題解決手法(アルゴリズム)を創りましょう!
Enjoy to create own Algorithm with Computers!

- 連載、IchigoJamではじめる、Armマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作
13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成
14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装
15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター

IchigoJamのCPU、LPC1114 Arm Cortex-M0のマシン語には、割り算命令がありません。
参考:マシン語表Cortex-M3以降にはあります SDIV/UDIV)

無いものは作ればOK!(IchigoJamでのR3はここでは封印

N / M = A ... R(A:商、R:あまり、ただしNもMも正の整数とする)という割り算をする場合、割り算記号を使わずに作成できればOKです。何か、得意な言語で作ってみましょう。

例えば、IchigoJam BASICなら

10 INPUT N 20 INPUT M 30 A=0 40 N=N-M:IF N>=0 A=A+1:CONT 50 N=N+M 60 ?A;"...";N RUN ?300 ?7 42...6

割り算記号を使わない割り算、できました!

これをasm15マシン語にします(USRでは引数が1つなので、割る数R1に7と設定)

R1=7 R2=R0 R0=0 @LOOP R0+=1 R2=R2-R1 IF GE GOTO @LOOP R0-=1 R1=R2+R1 RET

アセンブルしたバイナリ(18byte、R1設定を除くと16byte)を使って、動かしてみましょう

POKE#700,7,33,2,70,0,32,1,48,82,26,252,218,1,56,81,24,112,71 ?USR(#700,300) 42

これで完成! ・・・としてもいいのですが、割られる数が大きくて、割る数が小さい時、何万回もループすることになって遅そうです。

例えば、30000/1を計算する場合、1ループ5cycle3万回で15万cycle。CPUの周波数48MHzの逆数、21nsecが1cycleにかかる時間なので、63万nsec = 630usec = 0.63ミリ秒かかります。 足し算引き算かけ算の15万倍も遅いとなると、高速処理が命のゲームで使うには厳しいこともありそうです。

そこで登場、アルゴリズム(問題解決手法)!

ひとまず簡単に思いつくところで、2進数を使った筆算アルゴリズムで高速化してみます。 割り算を手で計算するときに筆算を使うように、大きな桁からかけ算して引いてを繰り返して答を求めます。 幸い、2進数の筆算は0か1かしかないので、とってもシンプル。何か書きやすいプログラミング言語でアルゴリズムを確かめます。

10 INPUT N 20 INPUT M 30 A=0 40 FOR I=10 TO 0 STEP -1 50 L=M<<I 60 IF N>=L N=N-L:A=A+1<<I 70 NEXT 80 ?A;"...";N RUN ?300 ?7 42...6

(変数が16bit用に、IchigoJam BASIC桁溢れ防止のため10bitシフトからスタート)
前の手法に比べて速くなったことが体感できましたね?では、こちらをマシン語にします。

R1=7 PUSH {LR,R4} R2=R0 R0=0 R3=16 @LOOP R4=R1 R4<<=R3 R2-R4 IF LT GOTO @SKIP R2=R2-R4 R4=1 R4<<=R3 R0+=R4 @SKIP R3-=1 IF !MI GOTO @LOOP R1=R2 POP {PC,R4}

ループ回数が16回にまで劇的に減り、先の最悪の場合と比較し、約1000倍高速です!

ただし、その代償として、マシン語の量が32byteと16byte増えてました。これが多いか少ないかは状況次第です。 また、割る数と割られる数が近い場合は毎回150cycleかかる今回の手法と違って、単純ループの実装の方が速かったりします。 状況によって使い分けましょう。

OSとしてのIchigoJamとしては、汎用的に使われることを想定して、あまりに遅い除算は残念なので、第二案でいきたいです。 ただ容量は極力小さくしたいので、かけ算が1cycleで動くことを利用して、もうひと工夫縮めてみます。

R1=7 PUSH {LR,R4} R2=R0 R0=0 R3=1 R3=R3<<16 @LOOP R4=R1 R4*=R3 R2-R4 IF LT GOTO @SKIP R2=R2-R4 R0+=R3 @SKIP R3=R3>>1 IF !0 GOTO @LOOP R1=R2 POP {PC,R4}

2byte縮み、引き算する場合のcycleが2減りました!
たった2byteと笑うかもしれませんが、その2byteを削るのに結構苦労したりするんです。

POKE#700,7,33,16,181,2,70,0,32,1,35,27,4,12,70,92,67,162,66,1,219,18,27,24,68,91,8,247,209,17,70,16,189 ?USR(#700,300) 42

実は、まだ落とし穴があります。マイナスの値で割り算の計算をさせてみてください。
おかしくなりますね。また、割る数に0を指定した時にどんな動きをしてほしいですか?
すべては、あなたの思い次第!

より高速で効率良いアルゴリズムを探してみるのも楽しそうです。Wikipediaの「除算」を見てみると、懐かしの割り算バグありPentiumの話がでてました。 試行錯誤の積み重ねで、今のコンピューター社会ができていることがわかります。

- 連載、IchigoJamではじめる、Armマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作
13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成
14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装
15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター

プログラミングしていると自分言語が作りたくなる時期が来ます。
IchigoJam BASICでコンパイラを作りたくなった時、書かれた数式を評価できたら便利です。

1 S="R0=1<<4+5"

容量の都合と優先度の関係で、数式を評価する関数 EVAL に対応していない IchigoJam BASIC ですが、実は数式を解釈するINPUTコマンドとキーバッファ操作を組み合わせれば実現できます。

まずはINPUTコマンドの実験

INPUT N:?N ?1<<4+5 261

計算してくれました!変数も関数も実は使えます。

次に予め数式をかいてみましょう

CLS:?" 3*5":LC0,0:INPUT N:?N 15

あとはエンターキーを押せば、Nに数式を評価した結果が入ります。
特殊キー、Home(18 = #12)を使って、行頭へカーソルを移動させておくこともできます。

?" 3*5";CHR$(18);:INPUT N:?N 15

あとは、メモリ内、キーバッファを直接操作して、入力したことにすれば自動化できます。

?"1<<5";CHR$(18);:POKE#1003,1,10:INPUT"",N:?N 32

メモリマップを見ると、#1003がキーバッファの数、その後がキーバッファとなっています。 POKEコマンドで、キーバッファの数を1、キー入力の値としてエンターを表す10をいれておくと、INPUTを呼び出した瞬間、帰ってきます。 (INPUTあとに空文字列指定で、?非表示に)

これを活用して、R0レジスタに数をいれるだけのコンパイラを作ってみます。

10 S="R0=1<<4+5" 20 A=#700 30 C="R0=":GSB@SCMP 40 IF F ?STR$(S+3);:GSB@EVAL:POKE A,N,32:A=A+2 50 POKE A,#70,#47:?USR(#700,0):END 100 @SCMP:F=1:FORI=0TOLEN(C)-1:F=F*(ASC(C+I)=ASC(S+I)):NEXT:RTN 110 @EVAL:?CHR$(18);:POKE#1003,1,10:INPUT"",N:RTN

40行、R0=n は、マシン語表を見ると、32(=1<<5)とレジスタ番号を足したものに、値と並べることがわかります。 Arm Cortex-M0は、下位が先に来る、リトルエンディアンなので、N,32の順番にメモリに書き込んでコンパイル完了!Armマシン語を生成されました。

ちょっと実験

10 S="R0=1<<10+12" RUN 12 OK ?N 1036

おや、Nの値はちゃんと計算されているのに、コンパイルしたプログラムはおかしいですね。
マシン語表を見ると、u8、つまり8bitまでしか対応していないわけです。

16bitまで対応させるに

R0=N>>8 R0=R0<<8 R0+=N&#FF

と、コンピューターくんに分かるように噛み砕いてあげましょう。

マシン語表を見ながらメモリに書くマシン語にします。(&#FFはなくても一緒なので省略)

N>>8,32 0,2 N,48

これをコンパイラに組み込んで、できあがり!

40 IF F ?STR$(S+3);:GSB@EVAL:POKE A,N>>8,32,0,2,N,48:A=A+6 RUN 1<<10+12 1036 OK

こんな調子で、自分だけのアセンブラ、自分だけのコンパイラを作っていきます。
Enjoy create an own computer language!

Maker Faire Bay Area では、IchigoJamで動くFORTHも人気だったとか!
モノ作りの祭典 MakerFaire は出会いの場!共に創ろう令和時代、中経連「中部圏イノベーション促進プログラム」にぜひお越しください!
キーバッファとIoTを使って、遠隔から任意コマンドを動かす技!
BASICコマンドをLTE送信!PCやスマホからIchiogoSodaを遠隔制御 | ボクにもわかる電子工作のブログ

- 連載、IchigoJamではじめる、Armマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作
13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成
14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装
15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター

電子工作やプログラミングをプラスして楽しい、ものづくり!

こどもに人気のLED。布越し表示が優しくていい感じ。紙芝居風アニメーションを作るのもかわいいかも。


ジグザグ - デンコーデザイナー
スマホのアプリでデザインと同時にできるBASICのプログラム、転送したらオリジナル電光掲示板のできあがり。


カラーパレットで色も選び放題!


デザイン部で出展、ジグザグデザイン


イヤーカフ、これなら電池マウントできるかも!?


イヤーカフとのらとりえさんの赤基板イヤリング!


Hicarixの岡本さん(@oka6)にも会えました!Arduinoファンさんと。
JavaScriptによる勝手制作転送プログラムによるwebアプリにも喜んでもらえてました。


見せてもらえた中身!CPUはAVR、なんと8x8マトリクスLEDも特注!


行列ができる電子アクセサリー屋さん!


すいラボさんと!


光るネクタイとの相性抜群、光るネクタイピン by すいラボさん


ネクタイピンですが、ヘヤピンとしてもいけました!


基板たくさん、きばんごっこさんのピアスとイヤリング


実はガチな基板屋さん!


飾ってある基板が渋い!humtopiaさん。


自然と基板の融合がテーマとのこと。自然を感じられる電子工作、良いかも。


アフリカ、ガーナの布を使ったアクセサリーと電子部品アクセサリー出展していた、LABOT26207さん。


音楽をやっていて基板が身近だったことがきっかけとのこと!


「基板ってかわいい!」

基板を目に触れる機会が減っていく中、基板との対話、はんだづけから始まるIchigoJamワークショップ。
抵抗、LED、コンピューター、それぞれの部品がつながって、プログラミングで想いのままに動いてくれる、不思議機械。
もっともっと身近なものにしていきたい!


こどもMAKERS増やしましょう!電気女子さんと!

デザフェスでも活躍、IchigoJamの最新版、1.3.2b11。
光るネクタイでも活躍、WS2812Bを接続して、WS.LED命令(WS.OUTから改名しました)だけで光ります。

LET[0],10,20,30:WS.LED 1

配列に、緑、赤、青の順に数をいれて1つのフルカラーLEDを制御

また、マニアックだけど人気上位な画面に出さないUART出力に対応!
UARTの第一パラメータに、+8 することで、画面出力しなくなります。
(IoT.IN命令を使った8byte受信にも対応! IOT.IN()命令後、#1152から8byteを読んでください)

試してみたい方はβ版をこちらからどうぞ!
ichigojam-1.3b11.zip
命令名変更:WS.OUT → WS.LED, 命令機能追加:UART 9など (画面表示OFFオプション +8)


いつかのようかいさんブース、いちごやん、かわいかったです。


デザフェスvol.49、今年なんともう2回あります!

何かつくるのが好きな人、得意なものづくりから広げていくのがオススメです。
まず何かつくったその次は、勇気を出して、気になるイベントに出展!

同日サンフランシスコで開催 Maker Faire Bay Area でも盛り上がっていた様子!
PCN Silicon Valley 謹製「QR ROM」は超便利!FORTH版も人気なので 変数 と 関数 を追加!

jig.jpの部活のひとつ、デザイン部。部活動でデザフェス出展!
ものづくりイベント Maker Faire とはちょっと違う雰囲気がまたおもしろい。

攻めたコスチューム発見。
テープLEDで飾ったメリーゴーランド、WS2812Bを使うと個別制御できて楽しいですよ!

WS2812BフルカラーLED制御対応 IchigoJam β だととっても簡単!
見に来てくれた、幼稚園児、小学生も興味津々!

お気に入り「暗いエリア」、ほんのり光るふわふわがステキ!

光で飾る。

光る昆虫。明かりデザイン、研究したくなりますね。

暗いエリアで活躍、光るネクタイ

秋葉原の明和電機ラジオスーパーHana道場通販でも入手可。改造方法はこちら

マトリクスWS2812Bを使った電光掲示板、布一枚通すと、いい感じという発見。

IchigoJam BASICで変更可能な電光掲示板のデザイン。(制御方法

スマホで描けたら便利そう、ということでひとまずざっくりつくってみました!

デンコーデザイナー - dotec48x8
URLがデータになっているので、変換して表示してみましょう!

IchigoJam x sakura.io = IchigoSoda
イノシシ檻連動、火災報知器連動、バス乗降数管理、お神輿など、多方面で活躍中。
手軽で楽しくオープンデータ化する手段で、2020年度全自治体オープンデータ化達成を後押しします。

世界一きっと簡単なIoT、人気のコマンド IOT.OUT

IOT.OUT 1

1万回送信して月64円と格安なので、気軽に使えて楽しいです。実は、1送信で送れるデータ量は最大128byteのポテンシャルを使い切る、まとめて送信に対応させてみました。

LET[0],1,2,3,4 OK IOT.OUT #800,128 OK

HELPコマンドで確認できるメモリ空間。#800は配列のアドレスです。128byte、1変数2byteなので、[0]〜[63]までの64数値をまとめて送付されます。長さの指定は8byte単位、128byteを超えて256byteまでを指定すると2通信分送られます。


IOT.OUT "Message from IchigoSoda!",24

メモリ位置と長さを指定するだけなので、こんな風に文字列をまとめて送ったり、ドット絵データを送るなども簡単です。
データの確認は、「sakura.io」の管理画面、websocketを連携させて、設定を開くのが簡単です!

webアプリとの連携など、こちらのサイトが詳しいです。
ボクにもわかる IchigoJam用 IchigoSoda / sakura.io の接続方法

実装としては、sakura.ioのモジュールへ、8byteずつキューにいれ、最後にフラッシュしています。

温湿度日照など多種のデータ、または、もっと細かい時間変化をお得に送りたいときに、ぜひどうぞ!
もちろんI2CWコマンドを使って、きめ細かい制御も可能です!(参考、位置情報リアルタイム共有デバイス

試してみたい方はβ版をこちらからどうぞ!
ichigojam-1.3b10.zip
命令機能追加:IOT.OUT, 命令復活:VPEEK (SCRの別名)
火星人を動かして小惑星帯で生き残れ!:IchigoJamプログラミング第4回 - 週刊アスキー

グラフィクス対応に続き、一日一実装。
こどもたちにも大人気のフルカラーテープLED、WS2812Bへネイティブ対応。
できるだけシンプルにと、配列へ緑、赤、青の順に入れて WS.OUT [LED個数] だけでOK!

WS2812Bの5V,DIN,GNDを、IchigoJamのVCC,OUT1,GNDへと接続して、

[0]=30:WS.OUT 1

これだけでOK! 緑色に光ります。(* 1.3b10で WS.OUT は WS.LED と命令名が変更になりました)

試してみたい方はβ版をこちらからどうぞ!
ichigojam-1.3b09.zip
新命令:WS.OUT, 命令変更:PSET → DRAW, 命令削除:VPEEK, LANG

バージョンアップ方法はまったさんのブログを参考に!
IchigoJamボードのファームウェアの焼き方 – about yrm

配列を使うので、102/3で最大34コのLEDまで対応。
エモメガネの片側20コをランダムに光らせるには・・・

10 FOR I=0 TO 3*20-1:[I]=RND(40):NEXT 20 WS.OUT 20 RUN


簡単ですね!

実装には、現在172byte使いました。
I/O関係がちょっと怪しく、ちょっと余計なコードが入っていて、要調査です。


福井高専に新着任、徳山高専出身の田村校長先生! 地球物理学研究会(通称、なまず)の岡本先生と。
キラキラ光る簡単電子工作&プログラミングで、プログラミング好きな学生増やしましょう!

すでにプログラミング好きな高専生にオススメイベントといえば、jigインターン2019!

Let's enjoy programming!

IchigoJamに、突如現れた864byteもの巨大なメモリ
とはいえ有限、どの機能が何バイトで入るか、暫定実装しながら最終的に盛り込む機能を決めていきます。


現状、要望の多い、カーソル位置取得(POS)、三角関数(SIN/COS)と、三角関数といえばほしくなる描画機能(PSET)を加えた、1.3β8公開です。(ハーフグラフィクス機能
ichigojam-1.3b08.zip

10 CLS 20 FOR I=0 TO 360 STEP 15 40 PSET 32,24,32+SIN(I)/12,24+COS(I)/12 50 NEXT

正式リリース版とは、仕様が異なったり、削除されたりする可能性があることをご留意ください。
暫定ですが、どの機能でどのくらい容量が増えるかと合わせて、ご紹介!

- カーソル位置取得機能 +72byte
POS(0) または POS() で、カーソル位置を左上からのメモリ相対距離で取得。(X+Y*W)
POS(1) カーソルX座標
POS(2) カーソルY座標
POS(3) 画面幅
POS(4) 画面高さ

- LOCATE / LC の機能変更 +20byte
パラメータ1つで、左上からのメモリ相対距離でカーソル位置を変更可能。(X+Y*W)
(LOCATEの省略形LCは、当時小学5年生だったMASAHARUの要望により実装!)

- 三角関数 +168byte
SIN(D) / COS(D) 角度を度でわたすと、256倍したsin/cosの値が返る

- グラフィックス +284byte
PSET X,Y - 1キャラクターを4分割したハーフグラフィクス(64x48)で点を描画。
PSET X,Y,A,B - ライン描画

欲しい機能アンケートが盛り上がってます!

IchigoJam を使っている、こどもの声もお聞かせください! Hana道場でも聞いてみます。

アフリカ、ルワンダの首都、キガリで開催された、ジャパン・パビリオンでの出展の様子が送られてきました!

こどもも大人も学生も、もっと手軽にプログラミングを楽しめる IchigoJam に!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像