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

Nintendo Laboレビュー、7セグディスプレイづくりとファミリーベーシックの思い出

2018/04/20
#KidsIT #mie 

Nintendo Lab のものづくり環境「Toy-Conガレージ」で7セグディスプレイづくり。
タッチでブロックをつなげる論理回路風に、自由に作れるモードがあります。

一番苦労したのが位置合わせ。動作している様子とロジックの紹介などはこちら。

「画面ひかる」ブロックを「うごく」で設定し、数に応じて光る部分が動くものと「中間」の「スポイト」を使って、各セグメント発光へつないで、0〜9まで7セグメント表示。 状態の整理用に「タイマー」ブロックを0.0設定して使用。ロジックを整理してどれだけシンプルに作れるか挑戦するのもあり(ヒント、カルノー図

タッチの操作が微妙で、思ったことと違う動作になってしまって困る。
ロジックを整理するのにまとめて選択が欲しい。
中間のブロックにバリエーションが足りない。
スポイトは入力がしっくりくる。
作ったプログラムの共有ができない(キャプチャーからのプログラム再現が困難または無理、ベーマガ・PCNこどもプロコンへ投稿できない)。
やっぱり普通にプログラムを書かせてほしい(もしかして、裏モードがあったりする!?)


「画面ひかる」は、IchigoJam同様、白オンリー。色を付けたい時は、古のカラーセロハンテクノロジー。


7セグLEDの用紙があったのでテンプレートがあるのかと思いきや、切り抜いたセグメントを手で埋めるという工作案内。 コンピューター制御したくなるよう誘っている!?ということで、やってみたのが上記でした。


アルプス電子の周波数の指定ができちゃう振動モーター内蔵コントローラーを使ったラジコン。前進のみ。


ダンボールの加工品質が良いので、表面が剥がれてしまうという残念なことがおきにくそう。


工作用のダンボールがたくさん!説明の紙はなし。すべてSwitch上で説明される。


Amazon限定!マステがかわいい。


Toy-Conガレージにたどり着くまでのチュートリアルが丁寧。(だけど、飛ばしたい・・・。)

本日、PCN三重代表、岡村さん来福!

届けてもらった、PCNこどもプロコン2017冬で、jig.jp賞受賞の三重県の清水帯刀くんから写真とうれしいメッセージ。 LEDマトリクスがお気に入りとのこと!派手にチカチカさせちゃってね!(チカチカのさせ方

清水くんの作品、JYUURYOKU IZYOU TITAI (重力異常地帯)
ボールの替わりにくるくる変わるカタカナが斬新な、IchigoJam BASICの作品でした。

PCNこどもプロコン2017冬 | PCN プログラミング クラブ ネットワークより)

ものづくり力アップの一番の近道は、作りたいものをとことん作ること!

31年前、小3の時、自分でゲームが作れることに驚いたファミリーベーシック。 BASICから入るプログラミングの世界は、入門本と実機、全国の仲間が作った生きた参考プログラムさえあれば、自分で思う存分チャレンジできる最高の遊び場でした。 ファミリーベーシックのおかげで始まったプログラミング人生。

Nintendo Laboから始まる、ファミリーベーシック第二章に期待!

links
- Nintendo Labo | Nintendo Switch | 任天堂
- ファミリーベーシック - Wikipedia
- 動画 - Nintendo Labo Toy-Con 01 - 7seg LED / 7セグメントLEDづくり - YouTube

電波時計の電波を見る。モールス信号デコーダーで学ぶデコーダープログラム

2018/04/19
#IchigoJam #KidsIT #maker 

自動的に時刻を合わせてくれる電波時計。 その仕掛けは、佐賀県(60kHz)と福島県(40kHz)に2箇所ある、起業家甲子園でおなじみNICT(情報通信研究機構)の施設から発信される電波にあります。 IchigoJamと電波時計モジュール(関西など用60kHz40/60kHz設定可能版 - aitendo)を使って電波時計づくりにチャレンジ!


高い音と低い音が同時になっても和音として認識できるように、電波も、周波数によってスマホの通信、無線LAN、テレビやラジオ放送など、同時に重ね合わせて使っています。 その中でも30kHz-300kHzの長波と呼ばれる帯域中で動いているのが標準電波(電波時計)、振動しているか否かという原始的な送信方法が使われています。

NICTのweb「標準電波の出し方」に、その信号フォーマットが紹介されています。

1bps = 1bit per second = 毎秒1bit
1データ 60bit、60秒/1分
データ種:マーカー(HIGH:200msec LOW:800msec)、1(HIGH:500msec LOW:500msec)、0(HIGH:800msec LOW:200msec)、モールス信号
エンコード方式:2進化10進数(BCD)による、時、分、通算日、年(西暦下2桁)、曜日、うるう秒情報、停波予告情報


通常時(毎時15分、45分以外)のタイムコードより)
うるう秒に対応する方法などがおもしろい!

電波時計モジュール(60kHz)は3.3VでもOKなので、ピンソケットをはんだづけ。IchigoJamのOUT1,-1として入力に切り替え、IchigoJamのVCC,GND,OUT1,OUT2に挿し込む。

10 OUT1,-1 20 ?IN(5);:CONT RUN

信号が見えました!
デコードプログラムをちょっと書いてみましたが、時々ノイズが入って化けてしまいます。

標準電波の変わっている点、毎時15分と45分の時はフォーマットは通常と違って、年と曜日の替わりに、モールス信号と停波予告が含まれています。

ノイズ混じりのデコードに挑戦する前に、モールス信号のデコーダーで腕試ししておきます。

モールスデコーダー for IchigoJam
モールス信号は、電波時計と同様、電波の特性周波数が振動しているか否かで伝える電波を使った最古で最もシンプルなコミュニケーション方式です。 短いON/OFFと、その3倍の長さを基本に、文字や文章を表します。

まずはボタンを押したかどうかを表示してみます(BTN(32)をBTN()にするとIchigoJam本体のボタンになります)

10 ?BTN(32);:CONT RUN 00000000000111000001100

ボタンが押された長さを測ってみます

10 IF BTN(32)=0 CONT 20 CLT 30 IF BTN(32)=1 CONT 40 ?TICK() 50 GOTO 10 RUN 15 4 4 6

短いはTICK()で10、1/6秒を区切りとして、長ければ3、短ければ1を表示してみます

35 IF TICK()>10 N=3 ELSE N=1 40 ?N; RUN 313311

押されていない間の時間も測って、長く押されていなかったら文字の区切りとします

45 CLT 46 IF TICK()<30 AND BTN(32)=0 CONT 47 IF TICK()>=30 ? RUN 13 333 111

1と3で表すモールス信号、A〜Zを配列にセットして、デコードするプログラムを追加します

2 LET[0],13,3111,3131,311,1,1131,331,1111,11,1333,313,1311,33,31,333,1331,3313,131,111,3,113,1113,133,3113,3133,3311 RUN 100 FOR I=0 TO 25:IF [I]=M ?CHR$(65+I) 110 NEXT:RTN M=13:GSB100 A OK

3と1を一桁ずつ足していくプログラムを作成

5 M=0 37 M=M*10+N 47 IF TICK()>=30 ?" ";M:M=0 RUN 0 13 13 333 333

デコーダーと組み合わせて、できあがり!

47 IF TICK()>=30 ?" ";:GSB100:M=0 RUN 31 A 3111 B 3131 C 333 O 111 S

こちら、できあがった簡易モールスデコーダープログラム全文

2 LET[0],13,3111,3131,311,1,1131,331,1111,11,1333,313,1311,33,31,333,1331,3313,131,111,3,113,1113,133,3113,3133,3311 5 M=0 10 IF BTN(32)=0 CONT 20 CLT 30 IF BTN(32)=1 CONT 35 IF TICK()>10 N=3 ELSE N=1 37 M=M*10+N 40 ?N; 45 CLT 46 IF TICK()<30 AND BTN(32)=0 CONT 47 IF TICK()>=30 ?" ";:GSB100:M=0 50 GOTO 10 100 FOR I=0 TO 25:IF[I]=M ?CHR$(65+I) 110 NEXT:RTN

手による遅い信号デーコードに慣れたら、同じくゆっくりな電波時計の信号デコードにも挑戦!

links
- 標準電波の出し方 - NICT国立研究開発法人 情報通信研究機構 日本標準時グループ
- 電波時計モジュール(60KHz) - aitendo
- 電波時計モジュール(40/60KHz) - aitendo
- 電波 - Wikipedia
- 音声読み上げで自学する和文モールス信号 on IchigoJam
- IchigoJam モールス信号エンコーダー アルファベット編
- こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
- IchigoJam検定

プログラミングで楽しく学ぶ「分数の足し算 / IchigoJamプリント」 - IchigoJam検定をリリース!

2018/04/18
#IchigoJam #KidsIT 

鯖江の小学校の算数の先生に、つまづきやすいポイントを聞くとやはり多い「分数」。
分数を数と訳した大失敗はひとまず置いておき、分数の足し算の解き方はプログラムそのものです。


分数計算プログラムで、1/5 + 2/8 を計算した様子

10 ?"A/B+C/D=" 20 INPUT "A?",A 30 INPUT "B?",B 40 INPUT "C?",C 50 INPUT "D?",D 60 F=B*D:E=A*D+B*C 65 FOR I=F TO 2 STEP -1 66 IF F%I=0 AND E%I=0 F=F/I:E=E/I 67 NEXT 70 IF F=1 ?E ELSE ?E;"/";F

作り方をIchigoJamプリントとしました。思う存分改造して、分数という罠を突破しましょう。

分数の足し算(算数) PDF

漢字を習っていない子供向けにも!

ぶんすうのたしざん(さんすう) PDF

IchigoJamの理解度をチェックする、IchigoJam検定をリリースしました!
2018年春「IchigoJam検定」を開始いたします! 〜2020年のプログラミング教育必修化に向け「IchigoJam」をお役立てください〜

links
- プログラミングの理解度をはかる「IchigoJam検定」小学生以上を想定 | リセマム
- 子どもパソコン「IchigoJam」がスキルを計る検定を開始 | ICT教育ニュース
- 分数が分かるアプリ
- 小学校で分数は教えるな!分数は数ではない 数の教育探求

デジタル指点字、6点式体表点字デバイスをIchigoJamで作る方法。代表が中学生のPCN支部誕生!

2018/04/17
#IchigoJam #braille #KidsIT 

指点字。見えず聞こえない、盲ろうの教授、福島智さんの本「ことばは光」に登場する、コミュニケーション手段です。 指の感覚というインプットを使い、6点で1文字を表す点字を、話し手から両手の人差し指、中指、薬指の6指使って受信する。

振動モーターを使った長谷川さん考案の体表点字の応用として、6つの振動モーターに拡張する回路を書いて、作ってみたのがこちら。

被験者は福井大学教育学部附属義務教育学校(以下、福大附属)科学部の小林くん
分かりそう!との声。

3Vで動き、100mA程度消費する、振動モーター(円盤型、2コ100円)を動かすには、せいぜい10mA程度しか流せないIchigoJamのOUTポートでは力不足。 そこで登場、電気信号で切り替えるスイッチ、MOSFET(モス・エフイーティー)、2N7000。 VGSthというしきい値が、2.1Vなので、OUT命令で3.3Vを出力するIchigoJamにぴったり。MOSFETの出力電流(ID)も200mAと振動モーター1つ駆動に十分です。


FAIRCHILD 2N7000 データシートより)
G(gate)に電圧をかけるとON、D(drain)からS(source)へと電流が流れます。

6つの振動モーターを制御するために、6つのMOSFETを配置します。
こういう時は紙と鉛筆(ボールペン)が便利、ちょうどいい配置が見つかりました。

Sを真ん中に一直線に配置し、GNDに接続。
振動モーターは3.3VからDをつなぐピンソケットに接続。
Gの隣にOUT1-6から配線。

IchigoJam用の拡張基板の工作には、aitendoの信号名入りユニバーサル基板[P-JAM-EXT-U]が便利です。
IchigoJam Tについている3.3Vは、最大300mA、振動モーター6つ(600mA)には不足するので、IchigoJamのCN5の5Vから電源をとって、別途レギュレーターで3.3Vをつくります。
手元にあった500mAのレギュレーターを2つ並べましたが、最大2Aのレギュレーター(2コ100円)がきっとシンプル。


振動モーター6つをマスキングテープで腕の貼り付け、動作確認。いい感じに震えます。

10 FOR I=0 TO 63 20 OUT I:WAIT 10 30 OUT 0:WAIT 60 40 NEXT 50 GOTO 10

6点、6bitで順番に出力するテストプログラム
(点字について、創ろう!攻殻機動隊の世界、体表点字で有線編 - 高専カンファレンス in 高尾2018 kosenconf-118takao // Speaker Deck


音声合成ボードの使い方とI2Cを紹介。いろいろしゃべらせて遊びながら夢広がっている様子。
大きな音が鳴るようにすると、関心引きそう。AIスピーカーは創れる!
しゃべるIchigoJamで、聞くプログラミング - 音声合成版ブラインドプログラミング


力強い看板「科学部」の先には・・・


天国がありました!ジャンクで創造、そして、販売へのチャレンジも楽しいかも!?
自分で創ったモノを売ってみよう!はじめてのしょうばい - 高性能温湿度計のつくりかた(SHT31編)


かわいいお魚。水族館プロジェクトがあるとのこと!


スッポン!なんと近所の川にもいるらしい。


中学生が代表するPCN支部、誕生へ!

代表の小林くん(右から2番目)は、はじめての人には教えられるけど、初級者向けにも教えられるようになりたいと意欲的。 附属幼稚園、福大教育学部の大学生、先生へと教えられる人は周りにたくさん!自分で設計して作っているという、自動ドアへもアドバイス。

メンバーで共有する、Twitterアカウントを作って、活動報告や、わからないこと質問などに使うと良いかも。 作った知見は、GitHubを使ってwebサイトとしての公開も効果的。いろんなツールを使いこなして、より良い社会を創っちゃおう!

すべての科目をプロジェクトベースで進める福大附属の新スタイル、子供たちが世界の教育を変えようと取り組む姿がスゴイ。日本の教育システム、まだまだポテンシャルありますねっ。

links
- プログラミングは勉強だってゲームに改造できる秘密の道具、福井大学附属中学校21世紀夢講座2017年から義務教育学校へ

高専インターン募集開始!鯖江を鯖江でハックしよう / バスのスピードメーターアプリ

2018/04/16
#kosen #opendata #sabae 

今年も開催、jig.jpのサマーインターン!
全国高専から集まる16人、4人4チームに分かれて、企画・開発・発表までの3週間(2018/8/20-9/8)


大変だった開発、あっという間だった生活 - jigintern2017の日記」よりインターン開発風景

初週末には、ゲスト開発者を交えたハッカソンでも腕試し。
IchigoJamが産まれた町、鯖江。
未成年無料のファブスペースHana道場、子供エンジニアやシニアエンジニアに会えるかも?

日本初のオープンデータ都市となった、福井県鯖江市には、楽しいAPIが満載!
鯖江駅から高専も結ぶ、市営のつつじバスのAPI x D3.js で、こんなアプリがすぐできる。

鯖江つつじバス スピードメーターズリアルタイムオープンデータAPI使用
デザインベース「D3.jsでスピードメーターみたいなものを作成 - とあるSEの手順書

Swift/Kotlin/Javaを使ったスマホネイティブアプリで使い勝手を追求するもよし、PWAで手軽に使えるWebアプリづくりもよし、IchigoJamやラズパイでのIoT、オープンデータを活用した機械学習、xRに挑戦するもよし。

がっつり開発スキルをアップしたい人にオススメです!

jig.jpグループは、一般利用者向けに動画配信サービス「ふわっち」、オタク向けフリマアプリ「オタマート」など、スマホなどモバイルを中心としたソフトウェアを企画・開発・提供する会社です。(創業者、福野泰介は福井高専卒。エンジニアの8割が高専卒)

16期目を数える恒例の高専生向け夏のインターンシップ、今年もがっつり3週間開催いたします。全国高専から集まる16名が、4チームに分かれて企画・開発・発表までを体験するプログラムです。

弊社エンジニアや、ゲスト開発者を交えたハッカソンや、BBQ、メガネストラップづくり他、各種アトラクションも用意。初対面で自称コミュ障な高専生も、すぐに打ち解けている様子。

全国の情報系高専生、インターンシップご担当教員の皆様からのエントリー、お問い合わせをお待ちしております。

【募集要項】
■期間 8月20日(月)〜9月8日(土) 朝解散 (チーム開発の為、全日程の参加が必須です)
■場所 株式会社jig.jp(本店・開発センター)福井県鯖江市めがね会館
■応募要件
・高専生(本科・専攻科)であること(学科不問)
・プログラミング・ものづくりが好きであること(自分でつくったサービスを世の中に!)
・インターンシップ保険(傷害保険)に加入可能であること
■支給 往復交通費、宿泊費

選考、エントリーなど、詳しくは下記まで。
学生インターンプログラム2018 ~全国高専生向けjig.jpインターンシップ募集開始のお知らせ~

音声読み上げで自学する和文モールス信号 on IchigoJam

2018/04/15
#IchigoJam #KidsIT 

読み上げてくれるとできるながら学習。
人間、複数の感覚から刺激されたことはよく覚えるようにできている。
なので、読んで、聞いて、手を動かして、作ってみて、考えてみるのがいい。

音声読み上げチップ AquesTalk pico x IchigoJam を使って、いままで覚えてこなかった和文モールス信号に挑戦。
100文字/分速度のモールス信号に続いて、かなをイロハ順に読み上げてくれるモノを作ってみました。

プログラムはこちら。配列に和文モールス信号が50コ、AquesTalk読み用のかなが50コ入れる。

10 LET[0],13,1313,3111,3131,311,1,11311,1131,331,1111,31331,1333,313,1311,33,31,333,3331,1331,3313,131,111,3,113,13113 20 LET[25],1133,13111,1113,133,3113,3133,3311,3333,31333,13133,33133,31313,31311,31133,31113,11313,33131,13311,33113,31131,13331,33313,13131,11,11331 30 LET[50],"i","ro","ha","ni","ho","he","to","ti","ri","nu","ru","wo","wa","ka","yo","ta","re","so","tu","ne","na","ra","mu","u","i" 40 LET[75],"no","o","ku","ya","ma","ke","fu","ko","e","te","a","sa","ki","yu","me","mi","si","e","hi","mo","se","su","n","da","pa" 100 FOR I=0 TO 49 110 ?[I],STR$([50+I]) 120 N=[I]:GSB@MORSE:WAIT 30 130 S=[50+I]:GSB@TALK:WAIT 30 140 NEXT 150 END 200 @MORSE:S=100 210 P=10:W=360/S:IF W<10 W=-36*261/S*10 220 B=10000:FOR J=0 TO 4:M=N/B%10:IF M<0 M=M+6:N=N+35536 230 IF M LED1:BEEP P,600:WAIT W*M:BEEP0:LED0:WAIT W 240 B=B/10:NEXT 250 WAIT W*3 260 RTN 300 @TALK:U=I2CW(#2E,S,LEN(S)):U=I2CW(#2E,13):RTN

ハマったポイントは、3と1とで表していたモールス信号、5文字の33000以上だと16bit正数の上限を越えて、値がマイナスになってしまう。
マイナスになった時は、適度な数を足して補正。(置換が使える環境であれば、3の替わりに2にしたほうが簡単)

工夫したポイントは、WAITのマイナス値指定を使うことで、1/(261*60)秒単位で待ち時間を調整し、より正確なモールス速度を実現している。200行のSを変更してみよう!
IchigoJam BASICリファレンス WAITの項目参照、IchigoJam web は未対応)

Nに符号化したモールス信号をセットして、呼び出す。下記は、有名なSOSの発信。

N=111:GSB@MORSE:N=333:GSB@MORSE:N=111:GSB@MORSE

links
- IchigoJam モールス信号エンコーダー アルファベット編
- モールス符号 - Wikipedia

格安7セグディスプレイ「LED&KEY」を使ってカチカチカウンターづくり、TM1638 x IchigoJam用マシン語SPIドライバの作り方

2018/04/14
#IchigoJam #asm 

7セグディスプレイ、LED、タクトスイッチがそれぞれ8つずつ実装済みで、AliExpressでは$1.5、Amazonでは2コで850円で売ってる謎の商品、LED&KEYを使ってカウンタづくり。 TM1638というSPIというスーファミのコントローラーなどと同様のよくある信号方式でコントロールできるとのこと!(IchigoJam(10) : Yoshiのブログより)

まずはハードウェア的にIchigoJamと接続。ちょうどいいことにIchigoJamの拡張端子CN4のVCC,GND,OUT1,OUT2,OUT3の並びで使えそうです。

裏面にピンソケット、L字ピンヘッダー、ピンヘッダーをはんだづけして、準備完了。
STBをOUT1で、CLKをOUT2で、DIOをOUT3でコントロールします。

SPIは、指揮者がタクトを振った時に楽譜を見てその音を鳴らす的な通信方式なので、BASICでも実現できます。ただ、パッとすばやく書き換えたいときにはマシン語の出番です。

10 POKE#700,112,181,12,24,24,75,25,166,143,32,0,34,90,96,0,240,32,248,1,34,90,96,64,32,0,34,90,96,0,240,25,248,1,34,90,96,192,32,0,34,90,96,0,240,18,248,8,37,32,120,48,92,98,120,210,1,16,68,0,240 20 POKE#73C,10,248,96,120,64,8,0,240,6,248,2,52,1,61,241,209,1,34,90,96,112,189,8,33,1,34,2,64,146,0,154,97,2,50,154,97,64,8,1,57,246,209,112,71,0,0,1,80,63,6,91,79,102,109,125,7,127,111 RUN

配列に表示したいパターン番号を入れて、マシン語呼び出しで表示されます。

[0]=1:U=USR(#700,#800)

こちら、ぐるぐると描画するデモプログラム

100 FORJ=1TO100 110 U=USR(#700,#800):N=7 120 [N]=[N]+1:IF[N]=10[N]=0:N=N-1:IFN>=0CONT 130 NEXT 140 WAIT30 200 FORJ=1TO20 210 FORI=0TO7:[I+8]=RND(10)+RND(4)<<8:NEXT 220 U=USR(#700,#800+16) 230 NEXT 240 WAIT30 250 GOTO100

書き込んだマシン語のデータの末尾10byte(#76C-#775)は、7セグディスプレイ用のパターンデータです。 0を小さな0に変更してみましょう

POKE#76C,#5C:U=USR(#700,#800)

元に戻す時はこちらでOK(#3F=63)

POKE#76C,#3F:U=USR(#700,#800)

オリジナルなパターンを表示したい場合は、#776以降を使って10以降の数字を指定すればOK

POKE#776,6,88,116,221,92,14,220,212 FORI=0TO7:[I]=I+10:NEXT:U=USR(#700,#800)


IchigoJam、と、ムリヤリ表記


7セグメントディスプレイのパターンづくりに作成「7seg sim
いろんな演出をしてみたり、ゲーム電卓風な遊びもできますね!
「ゲーム電卓」って何? 80年代で大人気だったものをカシオが復活

配列にいれるのも面倒な場合、マシン語へ呼び出す数を指定するだけ表示版が便利です

10 POKE#702,152,70,4,70,25,79,25,166,143,32,0,34,122,96,0,240,33,248,1,34,122,96,7,37,64,32,0,34,122,96,0,240,25,248,1,34,122,96,192,32,40,68,40,68,0,34,122,96,0,240,16,248,32,70,10,33,192,71,4,70 20 POKE#73E,8,70,48,92,0,240,8,248,0,32,0,240,5,248,1,34,122,96,1,61,226,213,8,33,1,34,2,64,146,0,186,97,2,50,186,97,64,8,1,57,246,209,112,71,0,0,1,80,63,6,91,79,102,109,125,7,127,111 RUN

使い方は簡単、数を入れてマシン語を呼び出すだけ(12345を表示する場合)

U=USR(#700,12345)

プログラム領域の末尾(#FFE-#FFF)を使って数を保存するテクニックを使い、電源を切っても途中からカウントできる、カウンターを作ってみました。

10 POKE#702,152,70,4,70,25,79,25,166,143,32,0,34,122,96,0,240,33,248,1,34,122,96,7,37,64,32,0,34,122,96,0,240,25,248,1,34,122,96,192,32,40,68,40,68,0,34,122,96,0,240,16,248,32,70,10,33,192,71,4,70 20 POKE#73E,8,70,48,92,0,240,8,248,0,32,0,240,5,248,1,34,122,96,1,61,226,213,8,33,1,34,2,64,146,0,186,97,2,50,186,97,64,8,1,57,246,209,112,71,0,0,1,80,63,6,91,79,102,109,125,7,127,111 30 N=PEEK(#FFE)|PEEK(#FFF) 40 U=USR(#700,N) 50 IF BTN() CONT 60 IF BTN()=0 CONT 70 N=N+1 80 U=USR(#700,N) 90 POKE#FFE,N>>8,N 100 SAVE 110 GOTO 50

Yoshiさんのプログラムを元に、タクトスイッチ読み込みもマシン語化してみました。
(DIOにIN3ではなくOUT3を使っている点に注意、タクトスイッチのどれかを押すとカウントアップモードになります)

10 'TM1638 15 POKE#700,18,75,8,33,1,34,2,64,146,0,154,97,2,50,154,97,64,8,1,57,246,209,112,71,12,75,128,34,18,2,154,24,17,104,6,180,4,32,65,64,17,96,0,33,0,32,0,34,154,96,26,105,138,64,210,8,16,68,2,34,154,96 16 POKE#73E,1,49,8,41,244,209,6,188,17,96,112,71,0,0,0,0,1,80 20 LET[80],#3F,#06,#5B,#4F,#66,#6D,#7D,#07,#7F,#6F,#77,#7C,#39,#5E,#79,#71 30 GSB@HELLO:OUT1,1:OUT2,0:D=7:GSB@DSPON 40 @LOOP1:N=N+1:GSB@GETKEY:[8]=K:N=N+1 50 IF K B=16:GSB@SETNUM:GSB@DSP7SEG:GSB@HELLO:GOTO@LOOP1 60 GSB@DSP7SEG:W=[0]:FORI=0TO6:[I]=[I+1]:NEXT:[7]=W:GOTO@LOOP1 70 @HELLO:LET[0],0,0,0,#76,#79,#38,#38,#3F:RTN 80 @SETNUM:W=N:FORI=7TO0STEP-1:[I]=[80+W%B]:W=W/B:NEXT:RTN 100 @DSPON:OUT1,0:U=USR(#700,#88|D):OUT1,1:RTN 110 @DSPOFF:OUT1,0:U=USR(#700,#80):OUT1,1:RTN 120 @DSP7SEG:OUT1,0:U=USR(#700,#40):OUT1,1:OUT1,0:U=USR(#700,#C0) 130 FORI=0TO7:U=USR(#700,[P+I]):U=USR(#700,[8]>>I&1):NEXT:OUT1,1:RTN 140 @GETKEY:K=0:OUT1,0:U=USR(#700,#42):FORI=0TO3:K=K|USR(#718,0)<<I:NEXT:OUT1,1:RTN

asm15マシン語のソースはこちら。

@SPIW1 R3=[@GPIO1]L R1=8 @LOOP R2=1 R2&=R0 'F=N>>I&1 R2=R2<<2 [R3+`110]L=R2 ' OUT2,0:OUT3,F R2+=2 [R3+`110]L=R2 ' OUT2,1 R0=R0>>1 R1-=1 IF !0 GOTO @LOOP @END RET @SPIR1 R3=[@GPIO1]L R2=#80 ' GPIO1DIR OUT3 to IN7 R2=R2<<8 R2=R3+R2 R1=[R2]L PUSH {R2,R1} R0=4 R1^=R0 [R2]L=R1 R1=0 R0=0 @LOOP R2=0 [R3+`10]L=R2 ' OUT2,0 R2=[R3+`100]L ' IN(7) (== OUT3) R2<<=R1 R2=R2>>3 ' ?2 R0+=R2 R2=2 [R3+`10]L=R2 ' OUT2,1 R1+=1 R1-8 IF !0 GOTO @LOOP @END POP {R2,R1} [R2]L=R1 RET @GPIO1 DATA L #50010000

SPIの書き込みと読み込み(IchigoJam BASICでOUT3,-1で入力にするとアナログ設定になるので、デジタルのまま入出力の方向をマシン語で切り替えています)

数値直接用ドライバでは、R3レジスタを使った除算を使います。

PUSH {LR} R1=10 GOSUB R3 POP {PC}

Armマシン語で10で割るテスト

POKE#700,0,181,10,33,152,71,0,189 ?USR(#700,1234) 123

割り算を呼び出すと、R1に余りが入った状態にしてくれます。

PUSH {LR} R1=10 GOSUB R3 R0=R1 POP {PC}

Armマシン語で10で割った余りを求めるテスト

POKE#700,0,181,10,33,152,71,8,70,0,189 ?USR(#700,1234) 4

これを使った数値直接表示ライブラリのプログラム。

@LEDS PUSH {R4-R8,LR} R4=R0 R8=R3 ' divide func R7=[@GPIO1]L R6=@PTN7SEG R0=#8F ' display on #88+7 R2=0 [R7+`001]L=R2 GOSUB @SPIW1 R2=1 [R7+`001]L=R2 R5=7 @SENDLOOP R0=#40 R2=0 [R7+`001]L=R2 GOSUB @SPIW1 R2=1 [R7+`001]L=R2 R0=#C0 R0+=R5 R0+=R5 R2=0 [R7+`001]L=R2 GOSUB @SPIW1 R0=R4 R1=10 GOSUB R8 R4=R0 R0=R1 R0=[R6+R0] GOSUB @SPIW1 R0=0 GOSUB @SPIW1 R2=1 [R7+`001]L=R2 R5-=1 IF !MI GOTO @SENDLOOP POP {R4-R8,PC} @SPIW1 R1=8 @LOOP R2=1 R2&=R0 'F=N>>I&1 R2=R2<<2 [R7+`110]L=R2 ' OUT2,0:OUT3,F R2+=2 [R7+`110]L=R2 ' OUT2,1 R0=R0>>1 R1-=1 IF !0 GOTO @LOOP RET @GPIO1 DATA L #50010000 @PTN7SEG DATA B #3F,#06,#5B,#4F,#66,#6D,#7D,#07,#7F,#6F

links
- はじめてのマシン語 - IchigoJamではじめるARMマシン語その1
- 54byteのスーファミコントローラドライバ、IchigoJam BASICとマシン語でつなぐ極上のコントローラ
- IchigoJam(10) : Yoshiのブログ (TM1638をIchigoJam BASICでコントロール)

IchigoJam モールス信号エンコーダー アルファベット編

2018/04/13
#IchigoJam #KidsIT 

PCN秋葉原Assemblageにて出会った、ハムつながり!
学生時代、モールス信号覚えてとったあアマチュア無線の免許。目に見える文字やモノを頭のなかでモールス信号にする訓練。

まずはシンプルなキーボードで打ったキーをモールス信号として出力するプログラムづくり。

モールス信号エンコーダー アルファベット編 (RUN on IchigoJam web)
Web Audio API を使って、サウンド出力にも対応している IchigoJam web でも動きます!

Aとタイプすると、ピピーっと鳴って、LEDも合わせて光ります。
いろいろ打っていると、なんとなく覚えられちゃいますよ。


本日、鯖江でKidsVenture&PCNミーティング
すべてのこどもたちにプログラミングを!

IoT for everyone! 大人IoTプログラミング体験 at Salesforce.com Tokyo Marunouchi

2018/04/12
#IchigoJam #IoT #KidsIT 

東京丸の内、世界一のCRMソフトウェア企業、セールスフォース・ドットコムにて、IoTプログラミング体験会。

こどもIoTハッカソンの流れに沿って、IchigoJamを使ったはじめてのプログラミング&電子工作&ネットワークづくり、そして、sakura.ioを使ったはじめてのIoTとアイデアソンまで!


IoTの前に「T」できた!(セールスフォース・ドットコムのみなさま!)


翔泳社デブサミでお会いした、セールスフォース・ドットコムの阿部さんも共同著書のIchigoJam紹介本つながりも!
子どもに読んで伝えたい!おうちではじめるプログラミングの授業 (SHOEISHA DIGITAL FIRST) | 阿部 崇, 平 初 |本 | 通販 | Amazon
子ども向けパソコン「IchigoJam」どこで買う?~はじめてのプログラミングキット購入とセットアップ (1/2):EdTechZine(エドテックジン)」 by レッドハット 平 初さん


まずはコンピューターの基本要素、インプット、アウトプット、電源の3点つなぐセットアップから


ディスプレイ、キーボードを外して、ボタンを押しながらスイッチON、モノがプログラミングできました
映画マトリックス、最終シーンの主人公ネオように、社会に潜むコンピューター達の息遣いが聞こえますか?


かわくだりゲームで学ぶアプリケーションの基礎、子供も大人もワーっとなる、魔法のコマンド、GOTO20
100円だって5000万回、コンピューターの繰り返し速度だって超高速(動画


今回の新アイテム、1つ40円の温度センサー(MCP9700-E/TO


平らで字が書いてある方を上に、足が右をむくようにおき、IchigoJamのCN4のGND/OUT1/OUT2に差し込みます
OUT1を入力(IN5)へ切り替え、アナログ信号入力コマンドANA(5)で温度に連動する数が取得できます
指で温めるとじわじわ上がる温度、飲み物で冷やすとどんどん下がる


値段の違いは、精度の違い。
原価の把握と必要最小現のスペックを見極めるがIoTビジネス成功の秘訣!


デバイスに刺さっているSIMカードが見えますか?
いよいよIoT、鯖江市営バスでも活躍、月額65円で1万回(日付除いて、最大1.2MB送受信)通信できる4Gデバイス sakura.io をつなぎます。

即興でもつくれちゃう、IoTピアノ

10 GSB810:IF F BEEP N,30 15 WAIT10:GOTO10

スマホから数を送るとその数に応じて圧電サウンダー(30円)から音が奏でられます
12名でのIoT合奏団のできあがり!


復習用「こどもIoTハッカソン大人体験会」の資料(アイデアまとめなど少し加筆版)


もっとやりたい!ぜひオンラインショップもある「PCN(プログラミング クラブ ネットワーク)」へどうぞ!

丸の内だと、PCN直営、秋葉原のフラッグシップ店、ASSEMBLAGEも近いです
東京駅から3分、JR秋葉原駅の電気街口から徒歩1分!


楽しい時間、ありがとうございました!
IoT programming for everyone!


お花きれいなセールスフォース・ドットコム社内、アストロ&クラウディ、かわいい

links
- Salesforce - セールスフォース・ドットコム
- 寄せられた感想
- こどもIoTハッカソン
- Hana道場
- こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)

7bit x 8 = 7byte、IchigoJam用バイナリデータ圧縮法 Base128実装例

2018/04/11
#IchigoJam 

IchigoJamでつくるオリジナルキャラクター、たくさん作るとプログラムが溢れてしまいます。
じぶんだけのキャラをつくる / はじめてのプログラミングその19

そんなときに便利な圧縮技術。168byte、21コのキャラクターがわずかこの2行!

* 圧縮にカタカナを使ったので打ち込みはちょっと大変(-はハイフン、カタカナの長音記号は使いません)

メモリに書き込んであるデータを、効率よくプログラム形式に変換するプログラムのつくりかた。

IchigoJamのキャラクターを眺めると、アルファベットなどとカタカナだけで128文字分はありそうです。

128コのキャラクターは7bit分データを表せます。
8bit(=1byte)を表現するのに足りない1bit分を7つ集めて1つの文字とすればちょうどいい。
0-82の83文字を「,(44)」から「~(126)」、83-127を「ア(177)」から「ン(221)」にそれぞれ対応させることにしました。
デコードする時のプログラムサイズが短くなるように、いろいろと試行錯誤し、短く仕上げたものがこちら。

A=#700:N=#7A7-A+1:?"1 '";:FORJ=1TON/7+(N%7>0):[0]=0:FORI=1TO7:C=PEEK(A):A=A+1:[0]=[0]|C&128>>I:[I]=C&127:NEXT:FORI=0TO7:?CHR$([I]+44+50*([I]>82));:NEXT:NEXT:?

#700からの168byteをプログラム形式に変換するエンコーダープログラム(長さはNで調整)

逆に、メモリに書き戻すデコーダープログラムはこちら

A=#700:S=#C04:FORJ=0TO23:FORI=0TO7:C=PEEK(S):S=S+1:[I]=C-44-50*(C>176)+[0]<<I&128:NEXT:FORI=1TO7:POKEA,[I]:A=A+1:NEXT:NEXT

大きめで168byteまでのマシン語のエンコードにも使えます!

バイナリをテキスト化する方式では、たぶん最も有名なのは64種類の英数字を使ったBase64
今回作ったものはBase64にカタカナを加えて128種類に拡張したBase128的なものと言えますね。

他にも、IchigoJam用に考案されたBase16B15なども!
自分なりに使い勝手良いエンコード方式、考えてみるのも楽しいですよ。

links
- IchigoJamのメモリ内のバイナリデータをテキスト・プログラム化するツール ( パソコン ) - ボクにもわかる電子工作 - Yahoo!ブログ
- BASE16 : (株)田木屋商店 開発室

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