BASIC ポケットコンピュータ BC-328P

小型タクタイルスイッチとOLEDスクリーンを使用した、Arduinoで動作する様に作られたBASICインタープリターが使えるポケットコンピューターを作ってみました。

BOOTHの商品ページ

https://mobi-electronik.booth.pm/items/1520931

元にしたのはこちらです(今回、数か所の回路変更とそれに対応したソフトウェアに変更しました。使いやすいように基板を作り直しただけで元とほぼ同じですが(^_^;))

CardKeyBoardでArduino用のBasicが動作する自作ポケコン

https://github.com/KeiTakagi/ArduinoBasic_cardKB

Arduino用BASIC

https://github.com/robinhedwards/ArduinoBASIC

 

・BASICポケットコンピュータ BC-328Pの仕様

 サイズ:10cm x 6cm
 電源:単4電池 x 1本
 消費電力: 約45mW

 8ビットマイクロコントローラ ATmega328P 8MHz

 50キー (一部キーは未対応)

  OLED 21文字 x 4行表示 ※テキスト表示のみ
 プログラムと変数エリア 1kバイト
 内部プログラム保存エリア 1kバイト (オートラン可)
 外部プログラム保存エリア 32kバイト

    デジタル入出力D13(基板上にLED有り)、アナログ入力A6、A7使用可能

 

以下Arduino 用BASICのページより翻訳、編集


BASICプログラムと変数には約1kのRAMが利用できるため、80年代のホームコンピューター(Sinclair ZX81)とほぼ同等です。

BASICは、フロート変数と文字列変数、多次元配列、FOR-NEXT、GOSUB-RETURNなど、ほぼすべての通常の機能をサポートします。
EEPROMへの保存と読み込みがサポートされ、電源投入時にプログラムを自動実行することも出来ます。
アナログピンとデジタルピンからの読み書きも可能です。(アナログA6,A7 デジタルD13ポートのみ)


・ベーシック言語
変数名には最大8文字の英数字a、bob32など使用できますが、文字列変数名は、たとえばa$、bob32$で終わる必要があります。(大文字と小文字は無視されます。BOB32はBob32と同じです。printはPRINTと同じです)

配列変数は通常の変数から独立しています。したがって、両方を使用できます。
LET a = 5
DIM a(10)
aはそれ自体が単純変数「a」を参照し、a(n)は「a」配列の要素を参照します。

算術演算子: + - * / MOD
比較演算子: <> (not equals) > >= < <=
論理演算子: AND, OR, NOT
式は、5 *(3 + 2)などの数値、また文字列は "Hello" + "world"など加算演算子のみが文字列でサポートされます(および以下の関数)。

・コマンド
PRINT <expr>;<expr>... e.g. PRINT "A=";a
LET variable = <expr> e.g. LET A$="Hello".
variable = <expr> e.g. A=5
LIST [start],[end] e.g. LIST or LIST 10,100 ※1行づつ表示します。"Fn"キーで次行を表示
RUN [lineNumber]  "Esc"キーでプログラムの実行を停止
GOTO lineNumber
REM <comment> e.g. REM ** My Program ***
STOP
CONT (continue from a STOP)
INPUT variable e.g. INPUT a$ or INPUT a(5,3)
IF <expr> THEN cmd e.g. IF a>10 THEN a = 0: GOTO 20
FOR variable = start TO end STEP step
NEXT variable
NEW
GOSUB lineNumber
RETURN
DIM variable(n1,n2...)
CLS
PAUSE milliseconds
POSITION x,y sets the cursor
PIN pinNum, value (0 = low, non-zero = high)
PINMODE pinNum, mode ( 0 = input, 1 = output)
LOAD (from internal EEPROM)
SAVE (to internal EEPROM) e.g. use SAVE + to set auto-run on boot flag(internal EEPROM only)
LOAD "filename", SAVE "filename, DIR, DELETE "filename" if using with external EEPROM.
DIR - EEPROMに保存されているファイルリストを表示
INKEY$ - (現在のバージョンでは未対応)
RND - random number betweeen 0 and 1. e.g. LET a = RND
? - フリーエリア表示

・関数
LEN(string) e.g. PRINT LEN("Hello") -> 5
VAL(string) e.g. PRINT VAL("1+2")
INT(number) e.g. INT(1.5)-> 1
STR$(number) e.g. STR$(2) -> "2"
LEFT$(string,n)
RIGHT$(string,n)
MID$(string,start,n)
PINREAD(pin) - see Arduino digitalRead()
ANALOGRD(pin) - see Arduino analogRead()
SIN(n)三角関数ラジアン
COS(n)
TAN(n)
EXP(n)
SQRT(n)

 

・外観

f:id:mobi_electronik:20190814113630j:plain

f:id:mobi_electronik:20190814110414j:plain

f:id:mobi_electronik:20190814110430j:plain

・動画

https://www.youtube.com/watch?v=o2Vc1l_HEts

※追記)オリジナルサイトではArduinoBASICになってますが、Arduino登録商標なのでArduino用という表現にしています。