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

マシン語が分かると楽しいC言語!
IchigoJamで楽しむC言語「c4ij」を最新API対応のバージョンアップ!

1セクター4KB、8セクターで32KBあるIchigoJamの内、2セクターを使って、最大7KBものマシン語プログラムを書き込んで、BASICから呼び出すことが可能です。

デモとして、WS2812B/WS2811用のドライバ呼び出しを使って色相環をぐるぐるまわすプログラムを作りました。

IchigoJam BASICで書いたHSV2RGB変換をC言語に移植!
割り算処理は、IchigoJam OSに含まれるものを使って、省メモリ化してます。

#include <std15.h> /* 100 @HSV2RGB:R=V:G=V:B=V:IF S=0 RTN 110 D=H/60%6:C=V-(59-H%60)*V/60*S/100:E=V-H%60*V/60*S/100:F=V*(100-S)/100 120 IF!DG=C:B=F 130 IFD=1R=E:B=F 140 IFD=2R=F:B=C 150 IFD=3R=F:G=E 160 IFD=4R=C:G=F 170 IFD=5G=F:B=E 180 RTN */ void hsv2rgb(int h, int s, int v, uint8_t* grb, uint64_t (*divfunc)()) { int r = v, g = v, b = v; if (s == 0) return; int d = divfunc((uint32_t)divfunc(h, 60), 6) >> 32; int hmod60 = divfunc(h, 60) >> 32; int c = v - (uint32_t)divfunc((59 - hmod60) * v * s, 6000); int e = v - (uint32_t)divfunc(hmod60 * v * s, 6000); int f = (uint32_t)divfunc(v * (100 - s), 100); if (d == 0) { g = c; b = f; } else if (d == 1) { r = e; b = f; } else if (d == 2) { r = f; b = c; } else if (d == 3) { r = f; g = e; } else if (d == 4) { r = c; g = f; } else { g = f; b = e; } grb[0] = g; grb[1] = r; grb[2] = b; } __attribute__ ((section(".main"))) int main(int param, int ram, int rom, uint64_t (*divfunc)()) { const int v = 50; const int n = 20; uint8_t* grb = (uint8_t*)(ram + 0x800); int h = 0; for (;;) { for (int i = 0; i < n; i++) { hsv2rgb(h + i * 5, 100, v, grb + i * 3, divfunc); } ws_led(3 * n, grb, GPIO_OUT1); if (inkey() == 27) break; h++; } return 0; }

新API、ws_ledを使って多数のWS2812Bを高速制御!最大輝度50(=v)で、20コのLEDを5度ずつまわす色相環。ESC(=27)が押されたらマシン語からBASICへ処理を戻します。64bitで返すことにして使うdivfuncは、上位32bit(=R1)があまり、下位32bit(=R0)が除数となります。

このコードで256byteをちょっと超える感じ。#700-#8FFまでを使った512byteまではプログラムに含められます(make poke)。それ以上はFILE1〜3の領域を使って、3KBまでのプログラムで書き込みます(make write)。 SAVEするのを諦め、まるっと残り7KB使ったプログラムづくりも可能です。(bas2bin機能をc4ijに統合しました)

IchigoJamで容量不足や、速度不足を感じて来たときの選択肢のひとつ!
(C言語はちょっと難しそうという方、Ruby版もあります)

「明和電機 x ギャル電」のイケてるアクセワークショップ!電子の力でキラキラさせよう!


夏休み特別企画「明和電機 超! 技能訓練所」開催! - 明和電機 - Maywa Denki明和電機 – Maywa Denki」 (オモチャは買って遊ぶより、自分で作ったほうがはるかに楽しい)

links
- 高専でなぜC言語を学ぶのか? IchigoJamマシン語生成プログラム c4ij で作る、C言語版かわくだり
- C言語で拡張するIchigoJam BASIC - 3KBマシン語をIchigoJamで動かすウラワザ
- c4ij - イチゴジャム レシピ
- IchigoJamで計算する色相環、色相・彩度・明度を光の三原色に / HSV2RGB in BASIC
- 実機転送実行まで1秒! Ruby on Jam でサクサク楽しい組み込みアジャイル開発

IchigoJam 1.4βが落ち着いてきたので、APIを使った Ruby on Jam を進めました!

早速デモをどうぞ!
ちゃんと動いた、かわくだりゲームと、USBシリアル経由で即時に転送実行しています。

IchigoJamで動くRuby版のかわくだりゲームのソースコードはこんな感じ

cls; x=15 while true lc x,5; p 79 lc rnd(32),23; p 42; p 10 wait 3 k=inkey() x=x-(k==28?1:0)+(k==29?1:0) if scr(x,5)!=0 break end end

pは1文字表示メソッドとしています。
mruby2.0でコンパイルしたmrbファイル、3kbyteまで対応。
そこそこ余裕ある組み込み開発が可能です。

IchigoJamのファイル領域として確保している後ろ8KBの内、前半を起動用BASICプログラム(entry.bas)とmrbファイル。後半を軽量 mruby VM を置いています。 一度本体にSAVEしてしまうとVM領域が壊れてRubyとして動かなくなってしまうので、また転送してご利用ください。

VM側をいじらなければ、C言語の知識も arm のコンパイル環境も不要です。


Rubyとアジャイル開発で有名な、永和システムマネジメント 平鍋さんと、福井出身つながりのNTTコミュニケーション 山下さん、鯖江のHana道場にてディスカッション! Rubyで作るIoTオープンデータ、福井発でやりましょう!

Ruby on Jam、今回はPCでの開発を基本としていますが、IchigoJam BASIC上で行番号付きで作ったRubyのプログラムをMixJuiceIchigoSodaなど、ネットで送信して、コンパイルしたものを受信して書き込むとかに対応するのもおもしろいかも。

転送は、セクター指定で書き込みができるように改造した lpc21isp を使用。部分書き込みでデバッグが早い!サクサク楽しい、組み込み開発が実現できました!

Let's play with Ruby on Jam!
IchigoJam/ruby4ij: Ruby for IchigoJam - src on GitHub」
1. Makerfile 内の環境設定 (IchigoJam は 1.4β9 以降にしておいてください)
2. make write で mruby VM for IchigoJam を書き込み
3. make mrbc で Rubyのプログラムをコンパイルして転送、自動的に起動します!

links
- 風船 Ruby 版 (ruby4ij)/Kidspod;
- そろそろ実用!? IchigoJamボードで動くRuby OS ver 0.2.0 – about yrm

IchigoJam、3年半振りのキャラクターパターン変更
せっかくなのでユーザーの方の意見を参考に「8bitフォントツール」でいろいろトライ!

試みたもの
- cとoの識別しやすさ
- AとRの識別しやすさ
- VとYの識別しやすさ

結果、cのみ反映。

A/R/V/Yは、いろいろいじって試してみるも、他の文字とのバランスなどとあわせてしっくりこなかったので、現状まま。

Aをシャープに表したこの形、単品でみるといい感じですが、並べてみると線の細さが気になるのと、まるっこてとっつきやすいかわいさが減ってしまいます。 タイポグラフィ、奥深い!

1.4からFlashの書き換え技が追加されています。自分フォントのIchigoJamづくりもどうぞ!


お盆で帰省、甥っ子達とプログラミング遊び!
さすがゲーマー、WAIT7でもしっかり見切っていた!

1 LED1:WAIT7 2 LED0:WAIT7 3 GOTO1

どこまで短くして当てられるかな!?

IchigoJam 1.4β9
- 小文字「c」のキャラクターパターン変更
- RUN時にキークリアするように変更
- IchigoJam webへも反映

ブログで使用するIchigoJamフォントも早速つくっていただいた、1.4対応版に更新!
IchigoJam フォント TrueType - イチゴジャム レシピ
CC BY IchigoJam / BALLOON a.k.a. Fu-sen.

105人が同時にプログラミングした、今年のプログラミングフェス in 永平寺。
「うごかないー」で悩み、間違い見つけて「うごいた!」になるのを楽しむのがプログラミングの基本。
でも、サポーターでも分かりづらい「カッコ違い」は対策せねばと思ったのでした。

バージョン1.2から変更なかったキャラクターパターン、カッコを中心にちょっと変更。
大なり小なり、カッコ、波カッコ、角カッコが識別しやすくなりました。
bits font maker」で作成。


こちらが今までのキャラクターパターン。大なり小なりを小さくし、普通のカッコの曲がる角度を浅くして、識別しやすくしてみました。波カッコは今のIchigoJam BASICの文法では使いませんが、より特徴付けておきます。 また、カタカナの「ハ」も上がくっついて見えることがあったので変更。

IchigoJam 1.4β8
- 大なり小なり、カッコ、波カッコ、カタカナの「ハ」のキャラクターパターン変更
- WS.LEDで出力するポートをOUT1からLEDへ変更


今回、WS2812B/WS2811などを制御するコマンド「WS.LED」で使う端子をOUT1からLEDへと変更。
こちら、光るカセットテープを光らせるプログラムが簡単に!

10 FOR I=0 TO 9 20 LET[i*3],RND(10),0,5 30 NEXT 40 WS.LED 10 50 GOTO 10

緑をランダム、青と加えて、10コのWS2812Bをキラキラさせてます!


OUT1を使って光らせたい!256コを個別に制御したい!そんな時はAPI呼び出しをどうぞ!(1.4b08専用)

10 POKE#700,9,32,0,2,1,68,3,32,0,2,2,74,238,35,27,136,24,71,0,0,4,0,1,80 20 CLS:FOR I=0 TO 256*3-1:POKE#900+I,RND(5):NEXT 30 ?USR(#700)

asm15のマシン語プログラムはこちらです(R0に制御LED数、R1にデータアドレス、R2に出力先アドレス)

R0=9 R0=R0<<8 R1+=R0 R0=3 R0=R0<<8 ' =256*3 R2=[@OUT1]L R3=#EE R3=[R3]W GOTO R3 @OUT1 DATA L #50010004

夏休み、マシン語入門もどうぞ!
はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

今日は京都!

京都で活躍、福井高専名誉教授、元担任のあっしー!
教科書「IchigoJamでプログラミング」の著書!


PCN京都南、NPO法人CREATIVE ADVENTUREによる夏休み12日間連続プログラム!
「教科書には載っていない特別授業 夏は冒険だ!」の11日目!


ちょっと長いプログラム、でも、みんな自分で考えながら打ち切った!


三三七拍子、一回演奏したら、センサーの反応を待って、回転。ロボの配置次第で連鎖が楽しめたり、タイミング合わせたり、学びは遊び、遊びは学び!


スペシャルゲスト枠で時間もらって、お話&デモ「ほしいをつくろう!」
デモ演奏したチカチカしながらカチカチ演奏する楽器、RRRM(ランダム・リレー・リズム・マシーン)


昔買ったハイパワーフルカラーLEDを発見(150mA)!ひとまずブレッドボードで実験できるように改造!(35mAまでの安いもの350mAまで流せちゃうものもあり、熱注意!)


明るい!これでも全然本気じゃない明るさ。明るくするときは、放熱と抵抗の定格電力に注意!


水やりIoTの実験にとつないだリレーを使って自動演奏!

10 W=RND(3) 20 FOR I=1 TO 4 30 OUT RND(3) 40 WAIT W*8 50 NEXT

プログラムはたったこれだけ!プログラミングを5Vに変えて楽器演奏、気分は明和電機!
ランダムと規則性を混ぜるのがポイント!ジャンルは、カオス?


PCN南大阪の代表、都さんによる、開けると鳴る電子オルゴール


内部の配線も女子力高い!
センサーとの組み合わせで楽器の楽しみも増しますね!


ココでも人気な360度カメラ。疾走感ある撮影方法、良い!


打つのが早いコ、みんなを待っている間にできるプログラムしない、早打ちタイピングゲームを伝授

CLT OK ABCDEFGHIJKLMNOPQRSTUVWXYZ Syntax error ?TICK()/60;"s" 34s OK

CLTと打って、エンター3回、?TICK()/60;"s" と打って、カーソル上4回、エンターおしてから素早くAからZまで打ち、エンター2回、タイムが表示されます。
もう一度やりたいときは、AからZをバックスペースかデリートキーで消して、CLT行に戻しましょう!
初回は78秒かかっていたコは、3回目で34秒と倍以上速くなった!


最後に事前に準備してあったリモコン操作プログラムで、カムロボ散歩!思い思いに楽しく遊んでました。


元気いっぱい、京都府向田市のこどもたち!
パソコン部の高校生によるサポートもばっちり!


創るほどに強くなる!「PCNこどもプロコン」で待ってるよ!

IchigoJam-FANIchigoJamで育てるブルーベリーを見て、面倒な庭の木の水やりを自動化を思い立つ。
Amazonで見つけた散水セット(2080円)と、水流をON/OFFする電磁弁(490円)を購入。

天候や、明日の天気に合わせて、必要最小限に自動的に水をやってくれるIoT水やりシステムをひとまず目指す。
まずは予備実験として、ホースを配線して、電磁スイッチによる水やり実験から!


まずはリレーで電磁スイッチ制御実験。
12Vの電源のプラス、リレーの通電時ON、電磁弁とつなぐ。
IchigoJamの5V、リレーとショットキーバリアダイオードのアノード/カソードを平行に、そして、トランジスタC1815のコレクタ(C)へとつなぐ。
トランジスタのベース(B)をIchigoJamのOUT1へ、エミッタ(E)をIchigoJamのGNDへつないで、配線完了。
「ボタンを押したら10秒間水をやる」簡単なプログラムをかいて、SAVE0して庭へいきます。

1 IF BTN()=0 CONT 2 OUT1:WAIT600:OUT0 3 GOTO 1

1 ボタンが押されていない間(=0)は繰り返し(CONT)
2 10秒間OUT1
3 1へ戻ってまたボタン待ちへ


蛇口から水をとるための器具も付属しています。(このままだと水漏れしたので、付属の黒いしっかりしまる器具を使用)


25mのホースを好きな場所でハサミで切って、水やりスポットを追加していきます。


水でた!


トラブル発生!ホース破裂!
電磁弁が閉まっている時、蛇口から電磁弁までのホースの水圧が高くなりすぎた様子。


ホームセンターで頑丈そうなホースをいろいろ買ってきました。
散水セット付属のの黒い1/4インチホースの替わりとしては、4x7と書かれたサイズがちょうどいい。景観的には透明がオススメ。


無事、一番奥の木の水やりも成功!

水圧を上げると、水流が増えて、抵抗が大きいと負荷がかかる様子が体感できてわかりやすい。
散水スポットは、赤いキャップを回すことで散水量を調整でき、電子回路の可変抵抗とLED的。
完全に閉めると水が止まり、水圧を高めるとその部分から崩壊、耐圧部品の必要性が体感できます。
出た水がグランド(土)へと還っていくのも、イメージ通り。

これが電子回路、電気回路だと、高電圧で部品が破裂したり感電したりと結構危ない!
水は濡れるだけなので安心。
目に見えない電気、特に高電圧、正しく怖がりましょう。
水回路で学ぶ、電子回路の教材づくりが楽しい予感!

電子回路は、よく水に例えられますが、実際水の配線をしたのは初めて。
水濡れが心地よい夏の間の体験としてオススメです!

小学生がプログラミングする時代、大人も楽しくはじめてみましょう!

自動ブレーキは果たして効くのか!?続きは、動画で!


自動運転プログラミングを体験に来てくれたアフレルさん、CM風動画にまとめてみました!
名古屋でも開催された Radish 会では、IchigoDyhook試作機が活躍!楽しみ!


CM編集画面。使い慣れたKeynoteで画像編集、並べて、クロウドソーシングでつくってもらったサウンドロゴ&BGM、初使用!


こちら以前、見せてもらった「IchigoDyhook」プロトタイプ!
単3電池4本で12時間駆動するとか!?電池交換も簡単、エネループなど充電池でもOK!
キーボードの打ち心地がすばらしい!


ブラインドタッチする小学2年生も!


思った通り動くかな?


IchigoDakeとその上に載ってる100円のコンピュータくん!
持って帰りたい!って声がうれしい。ぜひPCN秋葉原で自分だけのパソコン、つくってみてね!


PCN秋葉原!今日も4回、講師は各地で持ち回り!
本日のスライドデータはこちら。同じスライドでも、それぞれ個性がでておもしろい!


PCN幕張!


PCN東京!


PCN仙台!


PCN仙台、親方による持ち込み「100mダッシュゲーム」大人気!


大人も!


本日の100mダッシュランキング! 2.9秒という異次元記録!?


参加、ありがとう!


内閣官房IT室のみなさん、出店者のみなさんとの楽しい懇親会!
大人プログラミング&シニアプログラミングで、グローバルなIoT/AI時代を楽しみましょう!

links
- はじめてのじどううんてんプログラミング! こども霞が関見学デー in 内閣官房IT室(スライド公開)

2015年から5回目の出展、夏恒例、日本国の一大イベント「こども霞が関見学デー」25省庁が参加!
内閣官房IT室(総合通信技術総合戦略室)の今年のテーマは、キッズエンジニア!


PCNブースでは、各地で大人気の自動運転車「Radish」を使った「はじめてのじどううんてんプログラミング」
参加、ありがとう!


スライド「はじめてのじどううんてんプログラミング with IchigoJam (PDF)」(for Keynote / PowerPoint)
オープンデータです。どうぞ活用ください!(日本語キーボードエディション)


小学2年生!キーボードのやさしいガイド付きなので、キーボード使ったことないコでも大丈夫!


講師は各地PCN交代で実施、PCN前橋代表の飯塚さん!
おなじみ100円のコンピューターの速さ当てクイズ。


ヒントとして、富士通FACOM128Bさんに登場いただくことにします。


LEDの制御で肩慣らし後、簡易リファレンスを表示しながらの自動運転プログラミングへのチャレンジ!
まずは3秒動いて自動でとまるプログラム!


思い通りに動くかな?
コンピューターを外側に向けて、ボタンを押しながらRadishに差し込もう!
ヤバイと思ったら、左手側にある緊急停止スイッチを押せばOK。実は、ゆっくり動くのでぶつかっても大丈夫な安心設計。
うまくいっても、いかなくても、何度も試し放題、プログラミング!
あとは自由にやってみよー


キーボード、最初嫌がっていたコもいましたが、楽しい自動運転プログラミングの前に、どんどん打つ手が速くなる!
長いプログラムを作って、前後左右自在に動かし、思い通りにいって「にやり」

自由時間、慣れてきた頃に、センサー使ったサンプルを表示

1 OUT 33 2 IF ANA()<500 CONT 3 OUT 0

「まえへ、センサーのあたいが500以下の間まって、とまって」の意味。
1時間と短い時間ですが、プログラミングの基本から、楽しい自動運転プログラミングの楽しい本質、味わってもらえました。


PCN秋葉原、Assemblageからの出張展示。電子工作、たのしいよ!
この夏休みにぜひ遊びに来てみてね!(PCN秋葉原Assemblageへのアクセス、JR秋葉原駅電気街口から徒歩1分)


コマンドを自分で少しずつマスターしていくたびに広がる世界。ぜひいろいろつくって「PCNこどもプロコン」に挑戦してね!


総務省側で出展していた横浜、デジタル寺子屋@つづきチームも遊びにきてくれました!
総務省|令和元年度「こども霞ヶ関見学デー」開催のお知らせ


バンダイナムコ研究所ブース、かわいいロボット発見!AIロボット「キューゴロー」日本初出展!


ゲームするロボットの姿にこどもたち興味津々!


福井のこどもプログラミングつながり、アフレルさん!発売前のSPIKEプライムに触れる!


教育分野での提携発表したKDDIブースでは、ドローンでいちご育成!
IchigoJam x ドローン Tello EDU も本日発表!
教育用ドローン Tello EDUをBASIC(言語)で制御できる『FruitPunch』をDJI認定ストア大阪-深空株式会社にて独占販売開始 (2019年8月6日) - エキサイトニュース

1台のIchigoJamから複数ドローンをプログラミングする、編隊飛行にも対応!


内閣官房IT室の予約受け付けコーナー。
PCN「はじめての自動運転プログラミング with IchigoJam」は、11:00-12:00、12:30-13:30、14:00-15:00、15:30-16:30の計4回、各回8名。


場所は、霞が関、中央合同庁舎第4号館4階、419号室。見学や時間外のミニ体験などふらっとお越しください!
みんなでつくろう、キッズエンジニア!


つながう、世界のキッズエンジニア!(PCNケニアより)

2020年、小学校でのプログラミングの必修化を控えての先生向けの研修。
小学校プログラミング教育の手引(第二版)
実際にプログラミング(コーディング)する体験を通じて、コンピューターの凄さと性質に触れ、身の回りのコンピューターが透視できる力と、自分で学ぶ楽しさとワクワクする未来を感じさせてあげましょう。

経験的にベストは4年生で総合2コマ。ローマ字習得後で、クラブ活動が始まる学年で、通常教科を圧迫しません。コンピューターのおもしろいところを全員に伝える必要最小限は2コマ。準備時間を含めると、1コマ45分ではちょっと窮屈でした。


福井県坂井市とあわら市の視聴覚担当の先生向け合同研修。


光らせて、消してを表す複合コマンド「LED1:LED0」
依頼に応じて一瞬で仕事をこなしてしまうわずか100円のコンピューター。
驚きの体験、大事です。


実際の授業におすすめ、2人1組、交代でタイピングしていくスタイル。

動画と資料スライドはこちら(再掲、鯖江市豊小学校総合2コマ

こちら授業の動画(全編1コマ目2コマ目


はじめてのプログラミング with IchigoJam (PDF)」(自由に活用、改変できるオープンデータ)
大型テレビでスライドを映し、みんなで一斉に一歩一歩手順をたどって、ロボット&ゲームづくり!
こどもたちが作ってみたいもの人気ナンバーワンとツーを一気に体験してもらいます。


授業の復習用のプリント「IchigoJam はじめのいっぽ」&「IchigoJam ミニゲームズ」
時間に応じて、いろいろ改造する方法を紹介したり、自分なりにやってみる時間をとってあげましょう。

興味を持ったこどもたちが継続的に触れる環境づくり。室内用の遊具としてのIchigoJamやIchigoJamプリントや、電子工作マガジンをおく「IchigoJam Cafe」の設置や、プログラミングクラブがおすすめです。 (設置ご希望な小学校の方、ご連絡ください! ichigojam@jig.jp

タイピングしてテストを受ける時代、早いうちにキーボード慣れしておくといいです。
短く見やすく打ち込みやすい、横31文字10行以内で作る IchigoJam ミニプログラムシリーズ第1段。
「はやうちアルファベット」

10 T=0:Q=0 20 CLS:CLT:N=RND(26)+65 30 LC RND(32),RND(20):?CHR$(N) 40 S=TICK()/6:LC 0,21:?S 50 K=INKEY():IF K=0 GOTO40 60 IF K!=N BEEP:T=T+10:GOTO40 70 T=T+S:Q=Q+1:IF Q<10 GOTO20 80 ?T/10;".";T%10;"sec"


画面内にランダムに表示されるアルファベットをすばやく打て!間違えると1秒ペナルティー。10問で速度を競います。
5秒切れたらスゴイ!

まずは簡単に数字キーだけでもいいですね(差分、20行を改造) 「はやうちテン」

20 CLS:CLT:N=RND(10)+48


こちらも5秒切りを目指しましょう!

ちょっとゲームっぽく、カーソルの上下左右のみバージョン(差分、20行、60行を改造) 「はやうちアロー」

20 CLS:CLT:N=RND(4)+224 60 IFK+196!=NBEEP:T=T+10:GOTO40


こっちはがんばれば4秒切れるかも!?

一歩先ゆく、図工 x プログラミングもおすすめです。
400円で変えるサーボ(SG90)をジャンパー線3本(60本で220円)でつなげば、簡単で安価に動かせます。
プログラミングで自在に動かせるロボット工作のできあがり!


もっとやりたいこどもたちに、小学生向けご当地ロボコン「越前がにロボコン」や文科省後援「PCNこどもプロコン」をぜひご案内ください!

8/5は、日本最古級のパソコン、PC-8001の誕生日!


40周年を記念した、ちっちゃい版がお披露目!
BASICやマシン語で作られたゲームが16本、もちろん、自分で開発も可能!
細部まで再現し、BASICが動作する「PasocomMini PC-8001」 - PC Watch

今回はオリジナルのマイクロソフトのN-BASIC搭載!
33年前の私も、同マイクロソフト製のMSX-BASICで学びました!

35年後輩にあたる、IchigoJam BASICで自在に扱える国産パソコンIchigoJamは、現在バージョン1.4調整中。
こんなBASICのプログラムを入力すると・・・

10 A=RND(14)+1:T=RND(3)*20+20 15 FOR J=0 TO 3 20 FOR I=0 TO A-1 25 LET[I*3],RND(16),RND(16),RND(16) 26 NEXT 30 WS.LED A,256/A+1 40 WAIT T 42 NEXT 50 GOTO 10

オシャレな模様をランダム模様が表示されます!

こちら先週末の永平寺イベントで活躍した、WS2812Bを16x16、256コ並べた、大型ディスプレイ。

WS.LEDコマンドは配列にRGBやGRBの順に入った値を使って最大34コのWS2812BなどのLEDを制御できる1.4新設コマンド。 台二パラメータでリピート設定すれば、何千個ものフルカラーLEDも制御できます!

16x16、256コを個別に制御するには?
ちょっと背伸びしてマシン語を使いましょう。10進数の数を打ち込むだけで使えます。

10 POKE#700,16,181,6,72,9,34,18,2,17,68,3,34,18,2,1,35,238,36,36,136,160,71,16,189,112,71,0,0,4,0,1,80 50 CLS 60 S="プログラミングフェス2019 in エイヘイジ " 100 FOR K=0 TO LEN(S)-1 101 GSB200 102 C=ASC(S+K):P=1:GSB210 103 C=ASC(S+K+1):P=0:GSB210 104 U=USR(#700) 105 NEXT 110 GOTO 100 200 FORI=0TO5:[I]=RND(5)+I/3*15:NEXT:RTN 210 FOR I=0 TO 7 220 FOR J=0 TO 7 230 N=PEEK(C*8+7-I)>>J&1*3 235 A=#900+I*6+J*3*16+P*8*3*16 240 POKE A,[N],[N+1],[N+2],[N],[N+1],[N+2] 250 NEXT 260 NEXT 270 RTN

こちらが1.4で対応するAPIを呼び出す、マシン語部分のプログラム、asm15でアセンブルすると、10行の数の並び、マシン語が生成されます。

PUSH {R4,LR} R0=[@OUT1]L R2=9 ' = data address #900 R2=R2<<8 R1+=R2 R2=3 R2=R2<<8 ' = send 256*3 byte R3=1 ' = step 1 R4=#EE ' API to use WS2812B R4=[R4]W GOSUB R4 POP {R4,PC} RET @OUT1 DATA L #50010004

ただ、32byteもあって、APIを使っている割にはちょっと長い。

使うレジスタを破壊してOKなR3までにできればGOTOで呼び出しでき、PUSH/POPが不要になりそう。短縮するために数とリピートの指定を16bitシフトして1つのレジスタで渡すようにして、OUT1を表すアドレスの設定に6〜8byteも使うので、0指定ならOUT1ってことにしておくと、次のように14byteまで縮まる!

R0+=R1 R1=3 R1=R1<<(8+16) ' 256*3 R2=0 R3=#EE R3=[R3]W GOTO R3

APIづくりは、利用者想いが大事!
まずは自分で使うことだと、身にしみました。

近々バージョンアップします。
BASICで配列を使ったLED遊びはできるので、ベータ版お試しください
IchigoJam 1.4β7


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