Harucom で使える Ruby API のリファレンスです。

目次

Harucom API

Harucom は画面の描画やキーボード入力、日本語入力、基板の周辺機能を扱うためのライブラリを備えています。

DVI モジュール

DVI 出力の制御と画面描画のための低レベル API です。 テキストモード(106桁 x 37行)とグラフィックスモード(640x480 / 320x240)の 2つの表示モードがあります。

DVI.set_mode(DVI::GRAPHICS_MODE)
DVI::Graphics.fill_circle(160, 120, 50, 0xE0)
DVI::Graphics.commit

複雑な画面描画を行うにはP5 描画ライブラリ を使うと便利です。

P5 描画ライブラリ

Processingライクなインターフェースを提供する描画ライブラリです。 DVI::Graphics をラップして、塗りつぶし・線の色、座標変換、ブレンドモードなどを 扱いやすくまとめた API を提供します。

require "p5"
p5 = P5.new
p5.fill(p5.color(255, 0, 0))
p5.circle(160, 120, 50)
p5.commit

Keyboard

USB キーボードからの入力を扱う API です。 グローバル変数 $keyboard を通じてキー入力を取得できます。

key = $keyboard.read_char
case key
when Keyboard::CTRL_Q then break
when Keyboard::ENTER  then puts "Enter"
end

InputMethod(日本語入力)

日本語入力を自分のプログラムから使う API です。 グローバル変数 $ime にキーを通すと、変換されて確定した文字列を受け取れます。

text += $ime.take_committed if $ime.process(key) == :commit

Boardモジュール(周辺機能)

Harucom Board に載っている周辺機能は Board モジュールにまとまっています。 使うときは require で読み込みます。

Board::PWMAudio(オーディオ)

PWM オーディオでの音の再生と、音そのものを作る Synth の API です。 8チャンネルのミキサーで、波形や WAV / QOA のサンプルを鳴らせます。

require "board/pwm_audio"
audio = Board::PWMAudio.new
audio.beep(0, Board::PWMAudio::A4, 200)

Board::Pad(ボタン入力)

基板に載っている8つのボタンを読み取る API です。

require "board/pad"
pad = Board::Pad.new(Board::PAD0_PIN)
puts "up" if pad.read.up?

Board::DMX(DMX モジュールの制御)

DMX512 の信号を出力して、舞台照明を制御する API です。

require "board/dmx"
dmx = Board::DMX.new
dmx.start
dmx[6] = 255

PicoRuby ライブラリ

Harucom は PicoRuby で動いています。

以下のライブラリが組み込まれています。 リンクの付いているものは、リンク先の PicoRuby または mruby の リファレンスに詳しい説明があります。

ファイルシステム

クラス 説明
File (PicoRuby) ファイルの読み書き
File::Stat ファイルの大きさや更新日時
Dir (PicoRuby) ディレクトリの操作
VFS ファイルシステムのマウント
Littlefs フラッシュメモリのファイルシステム
File.open("/data.txt", "r") { |f| f.read(256) }
File.open("/data.txt", "w") { |f| f.write("hello") }
Dir.mkdir("/mydir")

ファイルの置き場所はファイルの入出力をご覧ください。

データ形式

クラス 説明
JSON JSON の読み書き
YAML YAML の読み書き
Marshal Ruby オブジェクトのシリアライズ
Base64 Base64 エンコード・デコード
Base16 16進文字列の変換

ハードウェア

クラス 説明
GPIO GPIO ピンの制御
ADC アナログ入力の読み取り
UART シリアル通信 2.0 から
PWM PWM 出力 2.0 から
Watchdog ウォッチドッグタイマー

どのピンが何につながっているかは Harucom Boardをご覧ください。

システム

クラス 説明
Machine 起動からの経過時間、スリープ、再起動、個体の ID
Time 時刻の取得・操作
Task タスクの生成と制御
Sandbox Ruby のコードを別のタスクで実行する
PicoRubyVM メモリの使用状況を調べる
RNG 乱数
ENV 環境変数(設定の内容が入ります)
Logger ログの出力
Editor テキスト編集のバッファと、全角を数える文字幅の計算

組み込みクラス

クラス 説明
String 文字列
Array 配列
Hash ハッシュ
Integer 整数
Float 浮動小数点数
Rational 有理数 2.0 から
Math 三角関数、平方根、対数などの数学関数
Range 範囲
Symbol シンボル
Enumerable map や select などの繰り返しの操作
Comparable 大小の比較
Proc ブロックと lambda
ObjectSpace 生きているオブジェクトをたどる
Regexp 正規表現
Data 値だけを持つクラスを作る

Kernel

Kernelモジュールは共通メソッドを定義していて、メソッドはクラスを書かずにそのまま呼べます。 mruby から受け継いだ tap や then はmruby のリファレンスにあります。

puts(*args)

puts "hello"

$stdout に書き出して、最後に改行します。Harucom では画面に表示されます。

print(*args)

$stdout に書き出します。改行はつけません。

p(*args)

それぞれの引数を inspect して、1行ずつ書き出します。 引数が1つのときはその値を、複数のときは配列を返すので、式の途中に挟んで中身を覗けます。

gets

$stdin から1行読んで返します。読むものがなければ nil を返します。

getc

$stdin から1文字読んで返します。読むものがなければ nil を返します。

sleep(sec)

sleep 1      # 1秒待つ
sleep 0.5    # 0.5秒待つ

指定した秒数だけ待ちます。小数も指定できます。 待っているあいだもほかのタスクは動くので、音の再生などは止まりません。

引数を省略すると、そのタスクは起こされるまで止まったままになります。 負の数を渡すと ArgumentError になります。

sleep_ms(ms)

sleep_ms 100

指定したミリ秒だけ待ちます。sleep と同じく、待っているあいだはほかのタスクが動きます。

usleep(usec)

指定したマイクロ秒だけ待ちます。

require(name)

require "p5"

ライブラリを読み込みます。$LOAD_PATH(既定は ["/lib"])から探すので、 /lib に置いたスクリプトは名前だけで読み込めます。 すでに読み込んでいるときは何もせずに false を返します。

load(path)

require と違って、読み込み済みでももう一度読み込みます。 書きかえたライブラリを試すときに使えます。

exit(status = 0)

プログラムを終了します。SystemExit を投げるので、アプリの中で呼ぶと IRB に戻ります。