プログラミングリファレンス
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 に戻ります。