IchigoJam BASIC 1.4.3をリリースしました。
累計発行ライセンス65536、ついに符号なし16bitで表現できない域へ!
栃木工業高校の生徒が設計したIchigoJam互換機、SkyBerryJAMも祝1,000ライセンス突破!

記念に、IchigoJamで音を使ったシンプルで楽しい例を紹介します。
題して「しゃべるIchigoJam」

音声合成ボードを使うわけではありません。付属のサウンダーのみでOKです。

FORI=1TO15:BEEP15+RND(15):WAIT5:NEXT

15だらけのこのプログラム、何かしゃべってるように聞こえましたか?
色々数を変えて、遊んでみましょう!

IchigoJam BASICで、プログラミングの楽しさを覚えた人にオススメ、JavaScript。
PCNこどもプロコンなどで、パソコンを手に入れたらはじめてみましょう!
ブラウザが入ってネットにつながっていれば誰でもすぐにはじめられます。
JSはじめのいっぽ

じゃみじゃみの音で赤ちゃんが泣き止むらしい。高品質なノイズは落ち着く音なのかもしれない。周りの音、ホワイトノイズでかき消してしまえるのでは? JavaScript(JS)と384kHzデバイスを使って、検証してみます。

ブラウザで音を鳴らす「WebAudio API」で使っている「createScriptProcessor」は、「AudioWorkletProcessor」に役目を移すようです。 ただ、Safariでは対応していないので、両対応したホワイトノイズを鳴らすアプリ、作ってみました。単なる乱数ではなく、生成される値が正規分布になる正規乱数にするのがポイント。

WhiteNoise
周りの雑音、見事かき消してくれました。音楽を聞きながらでは集中できないけど、まわりの音が気になる時、ホワイトノイズという選択肢はいかがでしょう? なんとなく、人の声や、何か音楽が聞こえてくるのが不思議です。48kHz、96kHz、192kHz、384kHz、いろんな周波数で聞いてみてください。

384kHzで鳴らすホワイトノイズ、#NT鯖江 で出展します。気になる方、ぜひ視聴しにいらしてください!

NT鯖江2020」2020/10/3-4土日開催 @SCC

福井新聞社主催、小学生プログラミング教室「はじめの一歩」
全国新聞社事業協議会主催の「みんなのみらい、みんなでつくろう~全国選抜小学生プログラミング大会」に向けた福井大会が初開催(10/31締切)。 越前がにロボコンPCNこどもプロコンに加わった新たなチャンス! 好きなもの見つけて、どんどんチャレンジしてもらいたい!


密対策、風の森ホールを広く使ったプログラミング教室、たっぷり3時間。 IchigoJamを使って、キーボード入門、逐次処理、繰り返し、条件判定、改造、LEDを増やすところまですすめる前半90分。 30分の休憩を挟んで、ボタン増設、光センサー、サーボモーター制御、組み合わせた応用を通じて、何かつくるアイデアを広げてもらう後半90分。


はじめてのプログラミング with IchigoJam (Keynote, PowerPoint)」
プログラミングはじめのいっぽから、ゲームづくりまでのスライドはこちら!復習や、人に教えてみると理解がぐっと深まるのでおすすめです。

1部で作ったゲーム、自宅で続きをする時は「LOAD1」いろいろ改造して楽しめる。
永平寺町、リアル開催プログラミングワークショップとダメージ制かわくだりゲーム改造法


本日のセットは、小型IchigoJamのIchigoDake + IchigoDyhook + わくわく電子工作キット + GND増設した特性電池ボックス!


はじめての電子工作。実験して、確かめる、これぞ科学!ものづくりの基本!


高専生もサポート、小学生前のめり!


福井大学院生もサポート、女子参加も多かった!


光センサーとサーボモーターを組み合わせてプログラミングしてつくる例、自動めがね拭き機!

広い会場、時々流れ星的な演出、見えました?
持ち込んだDMX512対応照明 x IchigoSoda(IoT対応IchigoJam)で作った、プログラム!1から5で角度指定、6でランダムモード!(参考、DMX512 x IchigoJam

10 POKE#700,240,181,114,182,64,24,80,33,9,2,1,49,9,4,128,38,118,0,1,34,202,96,4,39,63,2,29,55,0,240,37,248,2,34,202,96,93,39,0,240,32,248,4,120,164,0,1,52,1,48,1,34,202,96,45,39,0,240,23,248,1,37 20 POKE#73E,3,120,1,34,43,66,0,208,2,34,202,96,44,39,0,240,13,248,109,0,181,66,244,209,2,34,202,96,93,39,0,240,5,248,1,48,1,60,229,209,98,182,240,189,1,63,253,209,112,71 100 I=IOT.IN():IF I=0 CONT 105 IF I N=I:L=255:B=255:M=90 106 IF I=6 GOTO 200 110 POKE#800,8,0,250*N/6,0,M,0,0,L,B,RND(256),RND(256),RND(256),RND(256),0,0 120 U=USR(#700,#800) 130 WAIT10 135 IF L L=L-30:IF L<0 L=0 140 GOTO 100 200 POKE#800,8,0,250*N/6,0,M,0,0,L,B,RND(256),RND(256),RND(256),RND(256),0,0 205 N=RND(6):M=250*RND(6)/6:B=0:IF ABS(M-90)<40 L=255 ELSE L=50 210 U=USR(#700,#800) 220 WAIT10 230 IF IOT.IN() GOTO 100 240 GOTO 200

いろんな部品、プログラムを組み合わせて、自分だけの作品作り、挑戦しましょう!


最後に360度カメラで、集合しない写真!


同じ写真を別の角度で切り出したもの。


同じ写真をまた別の角度で切り出したもの。


光るフェイスシールド&永平寺町産イチゴマスク!


presented by 副新聞社 & スタッフ一同!

進めよう、創造的な人材育成!
創造的な人材の育成に向けて ~求められる教育改革と企業の行動~ 1996年 経団連

小学生向けプログラミングしたロボットで戦う「越前がにロボコン」、今年は制御が簡単な車輪型ロボットでも参加できるエントリー部門と、中学生も参加OKな中級者向け歩行型ロボット部門の2部門制。

ネットで見かけたおもしろそうなロボット「RoverC 6,599円」をIchigoJam BASICで制御してみました。


いい動きします!

RoverC」公式サイトを見るとアドレス#38を使ったI2C制御、IchigoJamでもいけそうです。 動かし方はC++のプログラムに載っている通り、4つのモーターの前後を-127から127で正逆回転方向を指定するだけとシンプル!

RoverCとIchigoJam、右から順につぎのように5本のソケットプラグのジャンパーワイヤーで接続します。

GND → GND
5V(供給)
G26 (SCL) → SCL
G36
G0 (SDA) → SDA
BAT → 5V
3.3V → VCC
5V

スイッチは、上からみて左に動かすとON!

1モーター動かすには、次のコード

POKE#700,0,30:?I2CW(#38,#700,2)

アドレス#700にモーター番号0〜3、改定方向と強さ-127〜127を指定して、I2CWで送信します。 これを4つのモーター向けに繰り返せば、制御OK!キーボードで動かすサンプルです。

5 S=30:M=0 10 K=INKEY() 11 IF !K WAIT10:GOTO10 15 ?K 20 IF K=UP N=S:GSB@V 30 IF K=DOWN N=-S:GSB@V 40 IF K=LEFT N=S:IF M GSB@H ELSE GSB@T 50 IF K=RIGHT N=-S:IF M GSB@H ELSE GSB@T 60 IF K=SPACE N=0:GSB@V 70 IF K=10 M=!M:LEDM 80 GOTO 10 300 @V:POKE#700,0,N,1,N,2,N,3,N:GOTO@W 310 @H:POKE#700,0,-N,1,-N,2,N,3,-N:GOTO@W 320 @T:POKE#700,0,N,1,-N,2,-N,3,N:GOTO@W 330 @W:FORI=0TO3:?I2CW(#38,#700+I*2,2):WAIT1:NEXT:RTN

5行 S:スピード1-127(20あたりだと弱すぎて動かない)、M:モード エンターキーで左右キーで左右移動か転回か切り替え
10-80行 キー操作によってRoverCコントロール
330行 4モーター分のデータ送信ドライバ
300-320行 前後、左右、転回コマンド


4つの車輪で横移動する機構がおもしろいですね!レゴ、テクニックシリーズのパーツで筐体づくりができるようになっています。


2020/11/8開催、第4回越前がにロボコン
RoverCは車輪型なので、エントリー部門にて参加可能です!

links
- M5Stack RoverCプログラム可能な全方向移動ロボットベース、M5StickC STM32f030f4マイクロコントローラーと互換性あり - Amazon

音楽を盛り上げる照明。ライブで気になる、数々の派手に動く照明の制御方法。 DMX512という1986年から開発が始まった、比較的古い仕様が現役で使われているようです。縦と横に動く、ムービングライトを制御してみました。


100Vの電源につなぐ照明なので、動きも明るさも派手でいい感じ!
U`King LEDステージライト 小型ムービングヘッド 20W RGBW  ムービングライト スポットライト 11/13 チャンネル DMX 512対応 両方向連続回転可能 ディスコライト /ミラーボール / 舞台 / 演出 / 照明 - Amazon


ムービングライト、裏にあるDMX512の入力と出力端子。デイジーチェーン(数珠つなぎ)して、多数の照明をまとめて制御します。


DMX512対応の照明の他に用意するのは、ケーブルとソケットと線材を少々。


ピンソケット4ピンを使って、はんだづけして実験用のソケットを作ってみました。(実用する場合はワイヤーを直接はんだづけし、ケースに入れるなどがオススメです)


使うのは3ピンだけ。GNDと+-逆になった信号線に250kbpsのシリアル信号が流れます。


ソケットにも描いてある番号、1:GND、2:Data-、3:Data+をそれぞれ、IchigoJamのGND、OUT1、OUT2へとつなぎます。


ムービングライトの仕様書。DMX512、512チャンネルある内の13チャンネルまたは、11チャンネルを使って制御します。 同じチャンネルにすると、同期して動きます。 使用するチャンネル番号は、オフセットは本体のメニューで設定でき、13チャンネル使うモードで39台、11チャンネルモードで46台を個別制御することができます!

以前作ったDMX512のマシン語ドライバを使って、チャンネル毎の仕様を見ながら、まずはランダムに光らせてみる実験です!

10 POKE#700,240,181,114,182,64,24,80,33,9,2,1,49,9,4,128,38,118,0,1,34,202,96,4,39,63,2,29,55,0,240,37,248,2,34,202,96,93,39,0,240,32,248,4,120,164,0,1,52,1,48,1,34,202,96,45,39,0,240,23,248,1,37 20 POKE#73E,3,120,1,34,43,66,0,208,2,34,202,96,44,39,0,240,13,248,109,0,181,66,244,209,2,34,202,96,93,39,0,240,5,248,1,48,1,60,229,209,98,182,240,189,1,63,253,209,112,71 30 OUT1,0:OUT2,1 50 POKE#800,7,0,N,0,N,0,0,255,RND(4)*50,RND(256),RND(256),RND(256),RND(256),0,0:U=USR(#700,#800) 55 N=RND(100) 56 ?N 57 WAIT60-BTN()*50 60 GOTO 50

本体ボタンを押したら、WAITを短くして高速化!


ギュンギュンと軽快に回るので、カメラをマウントしてロボットの頭にするのもいいかもしれません。センサーと組み合わせて派手なものづくりができそうです。 実物、NT鯖江に持っていくのでお楽しみに!


こちらもDMX512コントロール可能な、派手なライト。3種類の照明がいろんのスピードで回せます。好きな曲に合わせてプログラムしたり、ゲームのエフェクトにするのもいいですね! (→ AmazonでDMX512で検索!


本日、大人向けIchigoJamはんだづけ&プログラミング!100均ビーズが活躍!


かわいいIchigoJamができました!


まったさんも、外で何か大人の電子工作してました。
ソーラーパネルでバッテリーを充電、IchigoJamで自作する「チャージコントローラー」! – about yrm

日常で気になるアレコレ、自分でやってみると新たな発見、新事業のタネにもなるかも!?
福井県こどもプログラミング協議会は、福井県のIoT化、デジタル化を応援しています。
ご興味ある方、越前がにロボコン、こどもプログラミング実業団までお問い合わせください。

ベーマガこと、マイコンBASICマガジン(を別冊付録にしている、電子工作マガジン)の出版社、電波新聞社から「ALL ABOUT namco ナムコゲームのすべて」が復刻!初版は1985年、累計30万部に加え、復刻版も売り切れ続出の大人気!

当時のナムコのゲームの詳しすぎる解説と、各コンピューターへの移植した当事者ならではの解説が楽しく、ドット絵、楽譜まで収録!

テンポ表記が1/60秒(1フレーム)なところがおもしろい!
ギャラクシアン、32分音符が1/60秒、つまり、テンポに換算するとT450(60*60/8)

PLAY"T450L32O5C>BAGFEDC>BAG

こちら上の写真、冒頭部分を打ち込んだもの。Lで省略時の長さを32分音符に設定し、このようにIchigoJamのPLAY文(MML)として打ち込んでいくと、かわいいサウンドが再現できます!

マッピー、パックマン、ディグダグなど、楽しいサウンドの裏側をMMLから学べます!なるほど、こうやって効果音つくるんですね!


なんと、35年越しのアフターフォロー。楽譜の間違いに関する訂正版も掲載!愛され具合がすごい!

読み慣れていない人にとってつらいのは楽譜。IchigoJamによる楽譜チートプログラムで楽譜の読み方、マスターしましょう!

昔作った楽譜プログラムを改造し、鬼門、シャープとフラットに対応!
楽譜の先頭にシャープやフラットがついていたら、以降はその音がシャープやフラットになっているものとして扱います。「♮」がついていたら元の音。

10 POKE#700,0,0,0,255,0,0,0,0,56,124,254,255,254,124,56,0,254,124,56,255,0,0,0,0,0,0,0,255,56,124,254,254,0,0,0,7,0,0,0,0,0,0,0,192,0,0,0,0 20 S=" C ' D ' E ' F ' G ' A ' B '<C '<D '<E '<F '<G '<A '<B ":T=0:F=4:VIDEO3 30 CLS:FORI=1TO5:LC6,I+2:?CHR$(224,224,224);:NEXT 40 LC7,8-(T+1)/2::IF T%2=0 ?CHR$(225) ELSE ?CHR$(227,28,31,226) 50 IF T=0 LC6,8:?CHR$(228,225,229) 55 IF F<4 LC6,8-(T+1)/2:?STR$("b#"+F,1); 60 LC10,8:?STR$(S+T*4,3) 70 K=INKEY():IF!K CONT 75 IF K=30||K=31 T=T-(K=31)+(K=30):T=(T+14)%14:F=4:POKES+T*4+2,32:GOTO30 76 IF!(K=28||K=29||K=32)GOTO70 77 IF T%7=2&&K=29||T%7=6&&K=29||T%7=0&&K=28||T%7=3&&K=28 GOTO60 85 F=K-28:POKES+T*4+2,ASC("-+++ "+F) 90 PLAYS+T*4:GOTO30

上下で音符を動かし、スペースでその音を鳴らす。右でシャープ、左でフラットが鳴ります。
20行の前後の空白、大事です。後ろの空白部分に+や-を書き込んで、90行で演奏しています。

おや、フラットが効かないところがある?実は77行で制約をかけています。

ピアノの鍵盤、黒鍵はドレミの間に2つ、ファソラシの間に3つ。シャープがない音、フラットがない音をスキップしています。平均律では、C+はD-と同じ音。

効果音としてよく使う、なめらかにアップダウンさせるテクニックとして随所に登場!


レトロテイストのゲーム、IchigoJam BASIC、IchigoCake BASICで作ってみませんか?表紙裏にはPCN(プログラミング クラブ ネットワーク)


ゲームに関する研究具合がすごい!なんとフィルムカメラで撮影した画面写真を張り合わせたマップ!!位置合わせして、現像して、切り貼りして・・・、ゲーム愛が為せる技!


おなじみファミコン版に関してもアーケード版との違いを含めた解説がマニアック!


MSX版もしっかり解説!MSXとBASICプログラミング、小3のとき出会っていなかったらどうなっていただろう。


キャラクターが「カタカナ4文字」表記のMZ-700版、マッピー!電波新聞社がナムコの許諾を得て、いろんなコンピューター向けに移植していた歴史に触れられます。


Amazon.co.jp: ALL ABOUT namco (ナムコゲームのすべて): 本
かつてのゲーム少年から、ゲームづくりに興味ある現役少年少女まで、幅広く楽しめます!増刷、お楽しみに!

links
- 特別支援学校=盲学校+聾学校+養護学校(2007年から) IchigoJamで音楽を学んで校歌演奏しよう

神山町に続き、本日は永平寺町でIchigoJamプログラミングワークショップ!


永平寺開発センターにて、福井県永平寺町のこどもプログラミングのキックオフ! 越前がにロボコンや、PCNこどもプロコンなど、創造的人材育成に向けた継続的な活動、応援します!


検温・飛沫防止・疎、コロナ対策万全でリアル開催。


なんと、オリジナルイチゴマスクをご用意いただいてました!


今日、仲良くなる予定のコンピューター、IchigoDyhookをさしこみます。


ちっちゃくてかわいいコンピューター、でもその実力はあなどれません!エルチカで仕事の速いコンピューターくんを体験し、コンピューターとの距離がぐっと縮まるエルチカゲーム。


休憩時間は、ドローンのラジコンが人気!ドローンにもコンピューター、姿勢制御しながら無線でコントローラーの動きに応えてます。


作ったゲームが動いた!

10 CLT:CLS:X=15:PLAY"$CDE2" 20 LC X,5:?"V" 30 LC RND(32),23:?"**" 35 WAIT 3 36 X=X-BTN(28)+BTN(29) 37 X=X&31 39 IF SCR(X,5) BEEP:?TICK():END 40 GOTO20

キャラクターを変えて、点数を付けて、BGMとゲームオーバー時の効果音を付けたかわくだりゲーム。


更に、改造リクエストに応えます。

1000点でクリアとしたい!

34 IF TICK()>1000 ?"OME!":END

(メインループ内に、時間=スコアが1000を超えていたらメッセージ表示と終了を追加)

即死ではなく、ダメージ制にしたい!

10 CLT:CLS:X=15:L=3:PLAY"$CDE2" 39 IF SCR(X,5) BEEP:L=L-1:IF L=0 ?TICK():END

(ライフの残数を表すLを追加し、当たり判定でLを引き算、0になったときだけゲームオーバー)

回復アイテムをつくりたい!

30 LC RND(32),23:IF RND(10)=0 ?"%" ELSE ?"**" 38 IF SCR(X,5)=ASC("%") BEEP5:L=L+1 39 IF SCR(X,5)=ASC("*") BEEP:L=L-1:IF L=0 ?TICK():END

(1/10の確率で敵*ではなくアイテム%を表示するようにして、38行でアイテムだったらライフ+1、敵だったら当たり判定処理と変更)

BGMの音を高くしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5CDE2"

BGMのテンポを速くしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5T240CDE2"

BGMのテンポをもっと速くしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5T2400CDE2"

BGM、ドから高いドまで鳴らしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5T240CDEFGAB<C"

(<で1オクターブアップ、>で1オクターブダウン)

IchigoJamミニゲームズ」「IchigoJamプリント」や「IchigoJam BASIC 1.4 コマンド一覧」を見て、いろいろチャレンジしてみよう!


福井市少年少女発明クラブの会長、高橋さんと!


まちづくり株式会社ZENコネクトの方から動画インタビューに受けている様子。いちごづくし。

地域のIT人材育成、IoTによる事業創出、オープンデータによる支援に関心ある自治体の方にオススメのプログラム。まずは大人もプログラミング、体験してDXしましょう!
地域情報化アドバイザー派遣制度 - 総務省地域情報化アドバイザー一覧

links
- 神山町、遠隔プログラミングワークショップとPS/2ゲーミングキーボードの実力を計測!(オンライン開催)

人間はきっと本来、創るのが好き。好奇心で広がり、評価や挫折で狭まる好きの範囲。大好きなゲーム、こどもはみんな創りたい。

短時間でコンピューターの凄さと手軽さを楽しく体験、IchigoDyhookを使った、IchigoJamプログラミングワークショップ。今回は神山まるごと高専ができる場所、徳島県神山町にある神山バレー・サテライトオフィス・コンプレックスに来てくれたこどもたちへの遠隔講義。(前回はリアル講義


大いに楽しんでくれました!(サポートいただいた大人の方々、ありがとうございます!)
今日のスライドはオープンデータ、GitHubからダウンロードし、自由に改変含め、ご活用ください!(PDF/Keynote/PowerPoint
一度体験して、一度練習したら、誰でも誰かに教えられちゃいます。

エルチカとかわくだりゲームの間の休憩時間にライブコーディング。タイピング、速ければ速いほどかっこいい。 IchigoJamで使う、PS/2対応のUSB接続キーボード。実は1フレーム(1/60秒以下)を争うゲームの世界で重宝されています。

こちら、今回入手したお手頃ゲーミングキーボード「BUFFALO ゲーミングモデル USB & PS/2 有線キーボード ブラック BSKBCG305BK


特徴は右上の[mode]ボタンで切り替える「Turboモード」と青色ダイオード。通常1秒間に10回のキースキャンが、秒間50回、秒間120回へと高速化して、よりキーボードを押した反応がすばやくコンピューターに伝わるようになります。 合わせてキーリピートも超高速化!

10 WAIT 180 20 CLT:FORI=0TO119 30 IF INKEY()=0 CONT 40 NEXT 50 ?TICK()

3秒間待った後、120回キーが押される時間を計測。


結果
Turbo OFF 549 (9.1秒)
Turbo 50 143 (2.3秒)
Turbo 120 58 (0.9秒) - 今まで体験したことがない速さのキーリピート!

実測で120回/秒、出ました!
すばやく応えてくれ、同時押しにも強いPS/2ゲーミングキーボード、シビアな対戦ゲームづくりにも良さそう!

鯖江からzoomを繋いで福野さんのIchigoJamプログラミング教室を開催中。10人ほどの子供たちが夢中でBASICプログラミングを楽しんでいます。

本橋 大輔さんの投稿 2020年9月4日金曜日

どんどんつくろう!自信作、PCNこどもプロコンで待ってます!

links
- 新高専予定地、徳島県神山町でIchigoJamプログラミング with CoderDojo神山、遊ぼう自然もコンピューターも、はじめてのマシン語体験
- 神山まるごと高専、技術教育統括ディレクター就任に向けた所信表明と、Amabieペンダント

IchigoJamで使えるお手軽浮動小数点数FP15、せっかくなので四則演算を用意します。 有効桁2桁ですが、Googleの語源となったグーゴルシャノン数もカバーする10の127乗から、2022年制定予定のクエクトよりはるかに小さい、小数点以下126コ続く10の-127乗までのダイナミックレンジを、16bit/2byteで表現できます。

使い方は簡単、変数のAとBに、指数を上位に、仮数を下位にセットし、ライブラリを呼び出すと、変数Cに計算結果がセットされます。

10 ?"A=A-A*0.99" 20 A=6<<8|100 30 B=-2<<8|99:GSB@MUL 40 B=C:GSB@SUB:GSB@PUT:? 50 A=C 60 GOTO 30

20行、100x10の8乗、つまり、100億をAにセット。
30行、99x10の-2乗、つまり、0.99をBにセットし、掛け算ルーチン(@MUL)を呼び出し。
40行、計算結果CをBにセットし、A-B、引き算ルーチン(@SUB)を呼び出し。
50行、計算結果CをAにセットし、繰り返し!
→ 100億から小さな小数まで計算できました。

これを実現するプログラムは以下の通り

100 @PUT 110 E=C&#FF00/256:D=C<<8/256 120 IF E=0 ?D;:RTN 130 IF E>0 ?D;:FORI=1TOE:?"0";:NEXT:RTN 135 IF D<0 ?"-";:D=-D 140 IF E=-1 ?D/10;:IF D%10 ?".";D%10;:RTN ELSE RTN 150 IF E=-2 ?D/100;:IF D%100 ?".";:GOTO170 ELSE RTN 160 ?"0.";:IF E<-3 FORI=4TO-E:?"0";:NEXT 165 ?D/100;:IF D%100=0 RTN 170 ?D/10%10;:IF D%10=0 RTN 180 ?D%10;:RTN 200 @MUL 210 C=A&#FF00/256+B&#FF00/256 220 D=A<<8/256*(B<<8/256) 225 F=0:IF D<0 F=1:D=-D 230 IF D>>7 C=C+1:D=D/10:CONT 235 IF F D=-D 240 C=C<<8|D&255:RTN 300 @DIV 310 C=A&#FF00/256-B&#FF00/256 320 D=A<<8/256*100/(B<<8/256):C=C-2 325 GOTO225 400 @ADD 410 C=A&#FF00/256:D=B&#FF00/256:E=C-D 415 F=1:F=1:IF ABS(E)>0 FORI=1TOABS(E):F=F*10:NEXT 420 IF E>=0&&E<3 C=D:D=A<<8/256*F+B<<8/256 421 IF E<0&&E>-3 D=A<<8/256+B<<8/256*F 422 IF E<=-3 C=D:D=B<<8/256 425 GOTO225 500 @SUB 510 B=B&#FF00|(~B+1)&255:GSB@ADD:B=B&#FF00|(~B+1)&255:RTN

@PUT 指数に合わせて0をたくさん並べて、普通の数として表示するプログラム
@MUL 掛け算プログラム、指数は足し算、仮数は掛け算して有効桁を調整
@DIV 割り算プログラム、指数は引き算、仮数は100倍してから割ることで有効桁を確保
@ADD 指数の差を調整して足し算、指数の差が3以上は無視
@SUB 足す数の符号を反転して足し算、再び符号を反転してBの値は元に戻す

昔はよく分かっていなかったMSXの浮動小数点数、改めて仕様を確認すると、指数が10のn乗を使っていて親近感。仮数は4bitで10進数1桁を表現するBCDが使われてました。

有効桁2桁では足りない?配列2つを指数と仮数で使った、浮動小数点数の実現は、IchigoJam BASICでも実装できそうですね(掛け算、割り算に一工夫必要です)。ぜひチャレンジしてみてください!

0か1かで記録し計算するコンピューター。片手で31まで数える指二進法のように、2進法で整数は表現できますが、小数はどうするといいでしょう?

コンピューターにとってはただの0か1、人間がどう捉えるかだけの問題です。123という数を1.23と読み替えて、表示で工夫するだけです。

N=123 ?N/100;".";DEC$(N%100,2) 1.23

常に100倍して、下から2桁目が小数点と固定する方式、これを固定小数点表現と言います。

小数点の位置を数とセットで持っておけば、大きな数から小数点以下0がずっと続く、絶対値が小さな数まで表現できます。 これを浮動小数点表現と言います。

現代の一般的なコンピューターでは32bitの浮動小数点数が多く使われていますが、精度を落とした16bitのfloat16もメモリと時間を節約できるのでAIやCGなどで活躍中。

16bitと言えば、IchigoJamの変数の単位と一緒ですね!ただ、仕様に従って符号1bit、指数(小数点位置)5bit、仮数10bitのfloat16をそのまま実装するの、掛け算時のオーバーフロー処理などちょっと大変なので、指数部と仮数部を8bitずつ、しかも指数部は10進法で扱う「FP15」という勝手な規格で作ってみました。

日本の人口、1.26億人は、126 x 10の6乗なので、上位8bitに指数部6、下位8bitに仮数部126を入れて、6<<8|126 と表現します。仮数部はプラスマイナス127まで使います。(マイナスを入れる時は、A=6<<8|-126&255)と8bitに収めることを忘れずに!)


こちら仮に、人口減少率を大げさに3%(x0.97)として、シミュレーションした結果です。(昨年の実際の減少率は0.22%だったとのこと)

こちらがFP15の掛け算を含む、人口減少シミュレーションプログラム

5 Y=2020 10 A=6<<8|126:N=A:GSB@PN:?" A" 20 B=-2<<8|97:N=B:GSB@PN:?" B" 25 ?"Year ";Y;" P:"; 30 GSB@MULAB 40 N=C:GSB@PN:?" C=A*B" 50 A=C:Y=Y+1 60 GOTO 25 100 @PN:E=N&#FF00/256:M=N<<8/256:?M;"e";E;:RTN 200 @MULAB 210 C=A&#FF00/256+B&#FF00/256 220 D=A<<8/256*(B<<8/256) 225 F=0:IF D<0 F=1:D=-D 230 IF D>>7 C=C+1:D=D/10:CONT 235 IF F D=-D 240 C=C<<8|D&255:RTN

最近のCPUには、浮動小数点を計算する回路も含まれていて、超高速にやってくれますが、その実態を理解するには、プログラムで作って触ってみるのが一番です!

大人もこどももプログラミングを楽しく優しくオンラインで学べる、福井高専の先輩、ちっひーの講座、スタート!

ちっひー先輩によるオンラインプログラミング教室、開校! こどもも大人も親子でも! 誕生日もおめでとうございますー

福野 泰介さんの投稿 2020年9月1日火曜日

IchigoJam、はじめてのプログラミングから、深く楽しいコンピューターサイエンスまで、いろんな形でご活用ください!

IchigoJamで使うキーボードは、PS/2に対応したものが必要です。対応していたはずが、動かない現象が発生。原因が判明したので、その対策を紹介します。

結論、10kΩ前後の抵抗1つ、5VとKBD1またはKBD2に接続することで動きます。


サンワサプライのPS/2対応キーボード「SKB-KG3BKN」と色違い「SKB-KG3WN」は、サイズ感がいい感じ。 販売価格もAmazonで、1,255円と手頃な価格もうれしい。


改めて入手し、確認したところ、キーボードのLEDが全く反応しない状態。 自宅のPCをよく見ると、PS/2端子ありました。


PS/2キーボードとしての動作は確認できたので、通信プロトコルの間違いや、初期化のタイミングなどを探ります。


プログラムをいろいろと変えてみましたがどうやっても動かず、KBD1またはKBD2を5Vと抵抗10kΩを使ってプルアップし、信号の5V化を試したところ動きました! ただ、ソフトウェアだけでは対処できないので、残念ながら現在の基板では対応とは言い難い状態。


抵抗の両端、少し切るとコンパクトに収まります。


5V端子は別で使いたい場合、裏面にはんだづけするといいです。CN5の一番上5VとKBD1かKBD2へ10kΩの抵抗でつなぎます。 (他のピンに当たってしまわないように注意!)


はんだづけ、完了!


IchigoSodaも、10kΩ抵抗1つでこの通り、動きました。
抵抗は、100本で100円、プルアップ抵抗としてもよく使うので、この際100本、いっちゃいましょう!

links
- PS/2キーボードが無くならない3つの訳、IchigoJamの対応キーボード拡大!

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