SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

バーコードJam ボード版

入門用のカトラリーカードを使ってIchigoJamをプログラミングする、勝手なマイ・プロジェクト。
カードにバーコードを印刷して、これまでUSB接続やPS/2接続のバーコードリーダーを試したのですが、IchigoJamボードへ入力できずに失敗していました。そのため、やむなくWindowsアプリ版を使ったりしていました。
三度目の正直で、シリアル(RS-232C)接続のバーコードリーダーを使って、ついにカードからIchigoJamボードへプログラムを読み込むことに成功しました\(^_^)/
動画はこちら。

ユニバーサル基板で作った亀の子拡張基板に、aitendoのSPI液晶やRS-232Cコネクタなどを載せて一体化。モバイルバッテリで運用すれば、いつでもどこでもカードプログラミングができます。
バーコードリーダーの消費電力がそこそこあるらしく、普通のモバイルバッテリでも給電が切れません。やりやすいです)

回路図はこちら。バーコードリーダーのシリアル出力をIchigoJamのRXDへ接続しています。それとは別に5Vの電源がバーコードリーダーに必要なので、IchigoJamのCN5から取り出しています。

USBやPS/2接続のバーコードリーダーは、WindowsMacのマシンにつなぐとキーボードをエミュレートします。
今回使ったシリアル(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に置いて自動起動するといいでしょう)

関連ファイル

カトラリーカード(バーコード付き)PDFファイル

命令表