入門用のカトラリーカードを使ってIchigoJamをプログラミングする、勝手なマイ・プロジェクト。
カードにバーコードを印刷して、これまでUSB接続やPS/2接続のバーコードリーダーを試したのですが、IchigoJamボードへ入力できずに失敗していました。そのため、やむなくWindowsアプリ版を使ったりしていました。
三度目の正直で、シリアル(RS-232C)接続のバーコードリーダーを使って、ついにカードからIchigoJamボードへプログラムを読み込むことに成功しました\(^_^)/
動画はこちら。
ユニバーサル基板で作った亀の子拡張基板に、aitendoのSPI液晶やRS-232Cコネクタなどを載せて一体化。モバイルバッテリで運用すれば、いつでもどこでもカードプログラミングができます。
(バーコードリーダーの消費電力がそこそこあるらしく、普通のモバイルバッテリでも給電が切れません。やりやすいです)
回路図はこちら。バーコードリーダーのシリアル出力をIchigoJamのRXDへ接続しています。それとは別に5Vの電源がバーコードリーダーに必要なので、IchigoJamのCN5から取り出しています。
USBやPS/2接続のバーコードリーダーは、WindowsやMacのマシンにつなぐとキーボードをエミュレートします。
今回使ったシリアル(RS-232C)接続のバーコードリーダーでは、バーコードの生データ?が入力されます。
バーコードやシリアル通信データの具体的な内容は勉強不足ですが、とりあえず0〜9の数字の入力データは解読できたので、数字変換→BASICコマンドへ変換してプログラムを入力しています。
バーコードの 数字 |
入力データ 16進数 |
---|---|
0 | #0006 |
1 | #0067 |
2 | #0033 |
3 | #0066 |
4 | #0019 |
5 | #0065 |
6 | #0032 |
7 | #0064 |
8 | #000C |
9 | #0063 |
End コード? |
#79EB |
また、バーコードリーダーの転送速度がデフォルトで9600bpsなので、プログラム側で「BPS9600」と速度を合わせています。そのままだとプログラムをシリアル転送したい時にかなり遅くなるので、「BPS0」でIchigoJamデフォルトの115,200bpsに戻してください。
USB接続、PS/2接続と続いて、3台目のRS-232C接続バーコードリーダーでようやく実現できました。今の時代でも、シリアル接続ってバカにできないですね。
プログラム
プログラム0:本体
※1行目の「SWITCH1」を無くせば、通常のモニタで使えます。
1 SWITCH1:CLS:?"*Barcode Jam*" 2 CLV:F=FILE():BPS9600:WAIT60:CLK 3 LET[80],#06,#67,#33,#66,#19,#65,#32,#64,#0C,#63 4 OUT0:Z=0:L=0 5 ?"OK" 6 ?CHR$(1);:R=1 7 B=INKEY()&#FF:IF!BCONT 8 GSB29 9 ?CHR$(8);:IF!CGOTO16 10 IFTGSB15 ELSEGSB13 11 GOTO24 12 GOTO6 13 Z=Z+1:[Z]=C*16+O:IFC=8L=L+1:[70+L]=Z 14 ?">";Z*10;" ";:RTN 15 [Z]=[Z]|((C*16+O)<<8):T=0:RTN 16 BEEP30,30:IFO=1?"RUN":R=0:GOTO21 17 IFO=2?"LIST":R=2:GOTO21 18 IFO=3?"NEW":GOTO4 19 IFO=4CLS:GOTO5 20 GOTO6 21 A=0 22 A=A+1:IFA>ZGOTO5 23 C=[A]&#F0/16:O=[A]&15:?A*10;" "; 24 IFC=15&&O=15LRUNF+1,150 25 LRUNF+1,C*10 26 IFT&&(R!=1):C=([A]&#F000)>>12:O=([A]&#F00)>>8:T=0:GOTO24 27 B=INKEY()&#FF:IFBGSB29:IFC=15&&O=15BEEP30,30:?"ESC":GOTO5 28 GOTO22 29 I=89 30 K=-1 31 K=K+1:IFK<10&&B!=[80+K]CONT 32 IFB=[80+K]I=I+1:[I]=K 33 B=INKEY()&#FF:IF!BCONT 34 IFB!=#79GOTO30 35 D=0:FORJ=90TOI:D=D*10+[J]:NEXT 36 C=D/16:O=D%16:BEEP:WAIT30:CLK:RTN
プログラム1:命令サブルーチン
1 '*Barcode Jam-1 10 @LED 11 ?"LED ";O:IFR=1LRUNF,12 12 IFR=2LRUNF,26 13 LEDO:LRUNF,26 20 @WAIT 21 ?"WAIT ";O*60:IFR=1LRUNF,12 22 IFR=2LRUNF,26 23 WAITO*60:LRUNF,26 30 @BEEP 31 ?"BEEP":IFR=1LRUNF,12 32 IFR=2LRUNF,26 33 BEEP:LRUNF,26 80 @LABEL 81 ?"@";O:IFR=1LRUNF,12 82 LRUNF,26 90 @GOTOL 91 ?"GOTO @";O:IFR=1LRUNF,12 92 IFR=2LRUNF,26 93 A=[70+O]-1:LRUNF,26 100 @IFBTN 101 ?"IF BTN()=";O;" THEN ";:T=1:IFR=1LRUNF,12 102 IFR=2LRUNF,26 103 T=(BTN()=O):IF!T? 104 LRUNF,26 120 @FOR 121 ?"FOR I=1 TO ";O:IFR=1LRUNF,12 122 IFR=2LRUNF,26 123 I=1:J=O:S=A:LRUNF,26 130 @NEXT 131 ?"NEXT":IFR=1LRUNF,12 132 IFR=2LRUNF,26 133 I=I+1:IFI<=JA=S 134 LRUNF,26 150 @END 151 ?"END":IFR=1LRUNF,12 152 IFR=2LRUNF,26 153 A=Z:LRUNF,26
※プログラム0とプログラム1は、連続したスロットに置いてください。
(スロット0と1でなくても構いません。が、上記の様にモバイルで運用する時は、スロット0と1に置いて自動起動するといいでしょう)