< IchigoJam BASIC RPi/RPi+

IchigoJam BASIC RPi+1.2 ドキュメント

[2018/01/10]

English Edition(英語版) >

IchigoJam BASIC RPi+ は IchigoJam BASIC RPi の機能強化版であり、
Sense Hat と Touchscreen Display に対応した専用コマンドを備えています。
I-O DATA から発売のプリインストール microSDカードや入門キットを購入することにより利用できます。
IchigoJam BASIC RPi(フリー版)については、IchigoJam BASIC RPi1.2 ドキュメントをご覧ください。

1. 利用条件

利用規約に同意の上、ご利用ください。第三者への配布には別途契約が必要となります。

2. 対応機種

基本的に、すべての Raspberry Pi で動作するように開発しています。
こちらで動作確認済の機種は下記です。

※ Zero、Zero W と Model A+ については 一部のキーボードで、入力の反応がよくない現象が報告されていますが、
それ以外は Pi 3, Pi 2 と同様にご利用いただけます。

また、Sense Hat および Touchscreen Display については、
こちらで動作確認済の機種は下記です。

3. 入手方法

I-O DATA から発売の下記の製品をご購入ください。

アップデート

最新版への更新は下記の手順で行います。

  • パソコンなどを使い、microSDメモリーカード内のファイルを、任意の場所にコピーします。(バックアップ)
  • パッケージに記載のURLから、IchigoJam BASIC RPi+ の最新版をダウンロード・展開します。
  • microSDメモリーカード内のファイルを、ダウンロード・展開して生成されたファイルで上書きします。
  • filesディレクトリ, config.txt, keymap.txt をバックアップからmicroSDメモリーカードにコピー(復元)します。

4. 使い方

起動時のキーボード設定

microSDメモリーカード内の keymap.txt で起動時のキーボードの種類を設定できます。

keymap.txt に記入するテキスト キーボードの種類
us USキーボード
jp JPキーボード

※ キーボードの種類は起動後にKBDコマンドでも変更できます。(下記参照)

チュートリアル

I. IchigoJam BASIC を起動する

  • Raspberry Pi に microSDメモリーカードを挿入します。
  • モニターとキーボードを接続します。
  • USBケーブルなどを接続し、電源を入れます。

画面に左記のように表示されたら成功です!

II. 本体のLEDを点灯する

キーボードから LED1 と入力し [Enter]キーを押します。

Raspberry Pi 本体の Activity LED (緑色) が点灯したら成功です!

III. 本体のLEDを消灯する

キーボードから LED0 と入力し [Enter]キーを押します。

Raspberry Pi 本体の Activity LED (緑色) が消灯したら成功です!

IV. LEDをチカチカさせる

  • キーボードから 10 LED1: WAIT30 と入力し [Enter]キーを押します。
  • キーボードから 20 LED0: WAIT30 と入力し [Enter]キーを押します。
  • キーボードから 30 GOTO10 と入力し [Enter]キーを押します。
  • キーボードから RUN と入力し [Enter]キーを押します。

Raspberry Pi 本体の Activity LED (緑色)がチカチカしたら成功です!
停止させるときは [Esc]キーを押します。

5. オリジナル版との相違点

IchigoJam BASIC RPi は オリジナル版(LPC1114版)の 1.2.3 を元に移植されています。
操作方法や利用可能なコマンドは基本的にオリジナル版と同じですが、下記の点が異なります。
オリジナル版のドキュメントはこちらです。 https://ichigojam.net/IchigoJam-1.2.html

未実装のキー操作

下記のキー操作はRPi版には実装されていません

キー オリジナル版の動作
[右Alt] カナ入力モード切り替え([カタカナ]と同じ)
[Ctrl] + [Shift] カナ入力モード切り替え([カタカナ]と同じ)
[Ctrl] + [Alt] 挿入モード切り替え([Insert]と同じ)

RPi版専用のキー操作

下記のキー操作はRPi版にだけ実装されています

キー RPi版の動作
[右Alt] + [K] カナ入力モード切り替え([カタカナ]と同じ)
[Ctrl] + [Shift] + [K] カナ入力モード切り替え([カタカナ]と同じ)
[Ctrl] + [Alt] + [I] 挿入モード切り替え([Insert]と同じ)

未実装のコマンド

下記のコマンドはRPi版には実装されていません

コマンド オリジナル版の動作 RPi版の動作
VIDEO 画面の設定 なにもしない
SWITCH ディスプレイの切り替え なにもしない
SLEEP システムの休止(ボタン押下でLRUN0を実行して復帰) なにもしない
ANA 外部入力の電圧を数値で返す 常に0を返す
BEEP BEEPを鳴らす なにもしない
PLAY MMLで記述した音楽を再生する なにもしない
TEMPO 再生中の音楽のテンポを変更する なにもしない
SOUND 音が再生中なら1を返す 常に0を返す
USR マシン語呼び出し なにもしない

RPi版専用のコマンド

下記のコマンドはRPi版にだけ実装されています

コマンド RPi版の動作 使用例
KBD キーボードのキーマップの切り替え KBD 0 'USキーボードに切り替え
KBD 1 'JPキーボードに切り替え

※ LANG が返す数値とKBDで設定する数値は違うものです。
LANG は使用中のIchigoJamでカナ入力を有効にしたとき表示されるフォントの言語の番号を返します。
(LPC1114版 1:日本語, 2:モンゴル語, 3:ベトナム語)

その他

その他、下記の相違点があります。

  • キーボードを接続せずに電源投入すると、FILE0 を自動実行(LRUN0)します
  • PWM は PWM3 と PWM4 のみが使えます
  • IN3(OUT10)も OUT10,-2 でプルアップ入力になります
  • LED と OUT7 は連動しません
  • WAIT の省電力モードには対応していません
  • SAVE/LOADの入出力先はmicroSDメモリーカードのfilesディレクトリ内のファイルです(0-3,100-227)

6. IO系コマンドと物理PINの対応

IN/OUT/PWM

IN/OUT/PWM コマンドで実際に電流が入出力される物理PINは下記のようになります。

物理PIN 入力 出力 PWM 初期状態
15 IN1 (OUT8) 入力(プルアップ)
13 IN2 (OUT9) 入力(オープン)
11 IN3 (OUT10) 入力(オープン)
7 IN4 (OUT11) 入力(プルアップ)
35 IN9 入力(オープン,固定)
37 (IN5) OUT1 出力
36 (IN6) OUT2 出力
33 (IN7) OUT3 PWM3 出力
32 (IN8) OUT4 PWM4 出力
38 (IN10) OUT5 出力
40 (IN11) OUT6 出力
26 OUT7 出力(固定)

I2C

I2CW/I2CR コマンドで実際に電気信号が入出力される物理PINは下記のようになります。

物理PIN 機能
3 SDA
5 SCL

UART

UART接続時に実際に電気信号が入出力される物理PINは下記のようになります。

物理PIN 機能
8 TXD
10 RXD

ピン説明図

7. 既知の課題と対応予定

既知の課題

  • [issue 1005] Zero、Zero W、Model A+ で一部のキーボードの反応がよくない
  • [issue 1008] 存在しないアドレスへのアクセスなど、I2CWが非ゼロ(失敗)を返すべきところでゼロ(成功)を返すことがある

今後の対応予定

  • キー入力処理の改善(issue 1005 に関連)
  • ディスプレイ関連の実装(VIDEO, SWITCHコマンド)
  • サウンド関連の実装(BEEP, PLAY, TEMPO, SOUNDコマンド)
  • マシン語関連の実装(USRコマンド)

解決済みの課題

  • [issue 1007] カーソルが点滅しない
  • [issue 1006] TICKの値と画面のリフレッシュ回数が同期していない
  • [issue 1004] CLS,SCROLL,POKE,COPY,CLP による画面の変更が次のPRINT処理まで反映されない
  • [issue 1003] 一部のキーボードでオートリピートが効かない
  • [issue 1002] 一部のキーボードでShift,Ctrl,Altが効かない
  • [issue 1001] 一部のキーボードでテンキーのHome,End,PageUp,PageDown,Insが効かない

更新履歴

ver1.2.4
  • [issue 1007] を解決しました
  • [issue 1006] を解決しました
  • 画面描画処理を改善しました(issue 1006, 1007 に関連)
ver1.2.3
  • [issue 1004] を解決しました
ver1.2.2
  • [issue 1003] を解決しました
  • [issue 1002] を解決しました
  • [issue 1001] を解決しました

8. サポート

お問い合わせは下記にてうけたまわっております。

株式会社ナチュラルスタイル
IchigoJam BASIC RPi 担当 (support@na-s.jp)

また、技術的な情報の共有や質問等については下記のFacebookグループもご活用ください。
https://www.facebook.com/groups/ichigojam/

9. RPi+ 専用コマンド

IchigoJam BASIC RPi+ は Sense HAT および Touchscreen Display に対応した下記の専用コマンドを備えています。
これらのコマンドはIchigoJam BASIC RPi(フリー版)ではご利用になれません。

Sense HAT 対応コマンド

コマンド RPi+の動作 使用例
SH.CLS Sense HAT の LED を全て消灯する
SH.CLS
SH.CLS '全消灯
SH.PUT Sense HAT の LED の色を設定する
SH.PUT {横位置}, {縦位置}, {色:0-4095}
色の例(白:#FFF, 赤:#F00, 緑:#F0, 青:#F)
'左から4番目,上から4番目のLEDを緑に
SH.PUT 3, 3, #F0
SH.SCR Sense HAT の LED の色を取得する
SH.SCR({横位置}, {縦位置})
'左から4番目,上から4番目のLEDの色を表示
?SH.SCR(3, 3)
SH.SCROLL Sense HAT の LED をスクロールする
SH.SCROLL {方向}
方向の例(上:0, 右:1, 下:2, 左:3)
SH.SCROLL 0 '上方向にスクロール
SH.SCROLL 1 '右方向にスクロール
SH.AX
SH.AY
SH.AZ
Sense HAT の加速度を取得する
SH.AX()
SH.AY()
SH.AZ()
?SH.AX() 'X軸の加速度を表示
?SH.AY() 'Y軸の加速度を表示
?SH.AZ() 'Z軸の加速度を表示
SH.BTN Sense HAT のジョイスティックの状態を取得する
SH.BTN()
右から0bit: 下選択
右から1bit: 右選択
右から2bit: 上選択
右から3bit: 押下
右から4bit: 左選択
'ジョイスティックの状態を2進数でまとめて表示
?BIN$(SH.BTN(),5)
SH.BUP Sense HAT のジョイスティックの上選択状態を取得する
SH.BUP()
'ジョイスティックが上選択のとき1を表示
?SH.BUP()
SH.BDOWN Sense HAT のジョイスティックの下選択状態を取得する
SH.BDOWN()
'ジョイスティックが下選択のとき1を表示
?SH.BDOWN()
SH.BLEFT Sense HAT のジョイスティックの左選択状態を取得する
SH.BLEFT()
'ジョイスティックが左選択のとき1を表示
?SH.BLEFT()
SH.BRIGHT Sense HAT のジョイスティックの右選択状態を取得する
SH.BRIGHT()
'ジョイスティックが右選択のとき1を表示
?SH.BRIGHT()
SH.BPRESS Sense HAT のジョイスティックの押下状態を取得する
SH.BPRESS()
'ジョイスティックが押下のとき1を表示
?SH.BPRESS()

Touchscreen Display 対応コマンド

接続方法は IchigoJam BASIC RPi+ での Touchscreen Display 使用方法 をご確認ください。
コマンドを利用するには、一般的な接続に加え下記2箇所も接続する必要があります。

  • Raspberry Pi の 物理ピン3(SDA) と Touchscreen Display の SDA
  • Raspberry Pi の 物理ピン5(SCL) と Touchscreen Display の SCL

コマンド RPi+の動作 使用例
TS.X
TS.Y
Touchscreen の タッチされている場所を取得する(右下原点)
TS.X() 横位置 (0-799, タッチされていない:-1)
TS.Y() 縦位置 (0-479, タッチされていない:-1)
?TS.X() '横位置を表示
?TS.Y() '縦位置を表示
TS.GET Touchscreen の タッチされている場所を取得する(右下原点)
TS.GET()
上位8bit: 横位置 (0-199, タッチされていない:0)
下位8bit: 縦位置 (0-119, タッチされていない:0)
'タッチされている場所を繰り返し表示
10 P=TS.GET()
20 ?(P>>8);" ";(P&#FF)
30 WAIT10: GOTO10