language:English/日本語
こちらの内容はプレリリース品(mruby/c3.3)のものです。
- mruby/cIDE version:1.2
- mrbwrite version:1.2
- mrbc commpiler version:3.0
対応するファームウェアはこちらからダウンロードできます。

Ruby

mruby/cにて対応しているRubyのクラスについては下記公式URLをご参照ください。
https://www.s-itoc.jp/activity/research/mrubyc/mrubyc_docs/library mruby/cのIOクラス標準化に沿って実装されています。
I/O API Guidelines
下記RBoardのファーム沿った内容で説明します。

GPIO

クラスメソッド

GPIO.setmode( pin, params ) -> nil

pin : 0~20 または "B1"や"A2"などの文字列
params : GPIO::IN GPIO::OUTなど

# ピン番号1を出力に設定する。
GPIO.setmode( 1, GPIO::OUT )

# B1(6)ピンを入力、内部プルアップに設定する。
GPIO.setmode( "B1", GPIO::IN | GPIO::PULL_UP )
      

GPIO.read_at( pin ) -> Integer

pin : 0~20 または "B1"や"A2"などの文字列
指定したピンから読み込んだ値を、0または1で返す。
出力に設定したピンに対して read する場合は、ハードウェアが許せば、設定値ではなく実際の値を読んで返すべき。

GPIO.setmode( 1, GPIO::IN )
v1 = GPIO.read_at( 1 )          # read from pin 1.
      

GPIO.high_at?( pin ) -> bool

pin : 0~20 または "B1"や"A2"などの文字列
指定したピンから読み込んだ値が、ハイレベル (==1) であれば、true を返す。

if GPIO.high_at?( 1 )
      

GPIO.low_at?( pin ) -> bool

pin : 0~20 または "B1"や"A2"などの文字列
指定したピンから読み込んだ値が、ローレベル (==0) であれば、true を返す。

if GPIO.low_at?( 1 )
      

GPIO.write_at( pin, integer_data )

pin : 0~20 または "B1"や"A2"などの文字列
integer_data : 0 または 1
指定したピンへ値を出力する。
データが範囲外の場合(0と1以外)、RangeErrorになる。

GPIO.setmode( 1, GPIO::OUT )
GPIO.write_at( 1, 0 )      # output zero to pin 1.
      

コンストラクタ

GPIO.new( pin, params )

pin : 0~20 または "B1"や"A2"などの文字列
params : 定数参照
pin で示す物理ピンを指定して、GPIO オブジェクトを生成する。
同時に param を指定して、入出力方向などのモードを指示する。
pin は標準的には整数で指定するが、"B1"等PIC固有のピン番号を文字列にて指定できる。
param は以下の定数を使い、|で接続して指定する。
IN, OUT もしくは HIGH_Z の指示は必須とし、無き場合は ArgumentError が発生する。
定数:

GPIO::IN            # 入力に設定する
GPIO::OUT           # 出力に設定する
GPIO::HIGH_Z        # ハイインピーダンスに設定する
GPIO::PULL_UP       # 内部プルアップを有効にする
GPIO::PULL_DOWN     # 内部プルダウンを有効にする
GPIO::OPEN_DRAIN    # オープンドレインモードに設定する
      

# ピン番号1を出力に設定する。
gpio1 = GPIO.new( 1, GPIO::OUT )

# B1ピンを入力、内部プルアップに設定する。
gpio1 = GPIO.new( "B1", GPIO::IN|GPIO::PULL_UP )
      

インスタンスメソッド

read() -> Integer

読み込んだ値を、0または1で返す。

v1 = gpio1.read()
      

high?() -> bool

読み込んだ値が、ハイレベル (==1) であれば、true を返す。

if gpio1.high?()
      

low?() -> bool

読み込んだ値が、ローレベル (==0) であれば、true を返す。

if gpio1.low?()
      

write( integer_data )

integer_data : 0 または 1
ピンへ出力する値を0もしくは1で指定する。

gpio1.write( 1 )
      

setmode( param ) -> nil

params : GPIO::IN GPIO::OUTなど
GPIOのモードを任意のタイミングで変更する。
既に PULL_UP 等が設定されている時に IN,OUT もしくは HIGH_Z が指定された場合は、PULL_UP 等の設定は無効化される。

# 内部プルアップを有効にする
gpio1.setmode( GPIO::PULL_UP )

# 入力に切り替え、内部プルアップを有効にする。
gpio1.setmode( GPIO::IN|GPIO::PULL_UP )
      

ADC

アナログデジタル変換機能をサポートするクラス。
一般に、アナログ電圧値をデジタル値に変換する機能を持つ。

コンストラクタ

ADC.new( pin )

pin で示す物理ピンを指定して、ADC オブジェクトを生成する。
pin は標準的には整数で指定するが、"B1"等PIC固有のピン番号を文字列にて指定できる。
ピンが既にGPIO等で使用されていた場合、ADCに切り替える。

adc1 = ADC.new( 1 )
      

read_voltage() -> Float

値を読み込み、電圧値(V)を返す。0 ~ 3.3V

v1 = adc1.read_voltage()
      

read() -> Float

read_voltage のエイリアス

read_raw() -> Integer

値を読み込み、raw値(電圧に変換前の値)を返す。 0 ~ 1023

v1 = adc1.read_raw()
      

I2C

I2C バスをサポートするクラス。
マスターデバイス、7ビットアドレスのみをサポート。

コンストラクタ

I2C.new( *params )

オプションパラメータ
params type description
frequency Integer 周波数 (デフォルト 100kHz)
freq 同上 同上
scl_pin --- クロックピンの指定
sda_pin --- データピンの指定

# デフォルトの設定で、i2cオブジェクトを生成する。
i2c = I2C.new()

# I2C デバイスを、周波数 400kHz で使う。
i2c = I2C.new( frequency:400000 )   # 400kHz
      

インスタンスメソッド

read( i2c_adrs_7, read_bytes, *param ) -> String

i2c_adrs_7 アドレスのデバイスから、read_bytes バイトのデータを読み込む。
デバイスが途中で NAK を返す場合は、read_bytes より短い長さの String が返る可能性がある。
param にデータが指定されていれば、それを出力してからリピーテッドスタートを挟み読み込みを始める。

s = i2c.read( 0x45, 3 )                 # case 1
s = i2c.read( 0x45, 3, 0xf3, 0x2d )     # case 2
      
(case 1) S -- adrs(45) R A -- data1 A -- data2 A -- data3 A|N -- P
(case 2) S -- adrs(45) W A -- out1(f3) A -- out2(2d) A -- Sr -- adrs(45) R A -- data1 A -- data2 A -- data3 N -- P
    S : Start condition
    P : Stop condition
    Sr: Repeated start condition
    A : Ack
    N : Nack
    R : Read bit
    W : Write bit
      

write( i2c_adrs_7 , *outputs ) -> Integer

i2c_adrs_7 アドレスのデバイスに、outputs で指定したデータを書き込む。
書き込みできたバイト数が戻り値として返る。
outputsは、Integer, Array<Integer> および String で指定する。

i2c.write( 0x45, 0x61, 0x47 )
i2c.write( 0x50, 0x00, 0x80, "aG" )  # useful for EEPROM
i2c.write( 0x11, [0x61, 0x47] )
      
S -- adrs W A -- data_1 A -- ... -- data_n N -- P
    S : Start condition
    P : Stop condition
    A : Ack
    N : Nack
    W : Write bit
      

send_start()

Low level method.
I2Cバスに StartCondition を出力する。

i2c.send_start
      

send_restart()

Low level method.
I2Cバスに Restart (RepeatedStart) Condition を出力する。

i2c.send_restart
      

send_stop()

Low level method.
I2Cバスに StopCondition を出力する。

i2c.send_stop
      

raw_read( read_bytes, ack_nack = false ) -> String

Low level method.
I2Cバスから read_bytes バイト読み込んで返す。
ack_nack = true で最後のバイト読み込み時に ACK を、false で NACK 出力する。

str = i2c.raw_read( 20 )
      

raw_write( *outputs ) -> Integer

Low level method.
I2Cバスへ outputs で指定したデータを書き込む。
書き込みできたバイト数が戻り値として返る。
outputsは、Integer, Array<Integer> および String で指定する。

i2c.raw_write( 0x45, 0x30, 0xa2 )
      

SPI

SPI バスをサポートするクラス。
マスターデバイス、8bit 単位の転送のみ対応。
チップセレクト SS はGPIO機能を使用してください。

コンストラクタ

SPI.new( id=nil, *params )

id : 1 または 2
id で示す物理ユニットを指定して、SPI オブジェクトを生成する。
オプションパラメータ
params type description
unit --- SPIユニットの指定
frequency Integer 周波数 (デフォルト 1MHz)
mode Integer 0 to 3 (default 0)
first_bit Constant SPI::MSB_FIRST or SPI::LSB_FIRST (default MSB_FIRST)
モードパラメータ
mode CPOL CPHA Idle state clock polarity Sampling timing
0 0 0 Low Rising edge
1 0 1 Low Falling edge
2 1 0 High Falling edge
3 1 1 High Rising edge

# デフォルトの設定で、spiオブジェクトを生成する。
spi = SPI.new()

# ユニット1 の SPI デバイスを、周波数 10MHz で使う。
spi = SPI.new( unit:1, frequency:10_000_000 )
      

インスタンスメソッド

setmode( *params )

SPI の動作モード(パラメータ)を変更する。
パラメータの指定は、コンストラクタに準拠する。

spi.setmode( mode:3 )
      

read( read_bytes ) -> String

SPIバスから read_bytes バイトのデータを読み込む。
同時に出力されるデータは、0が出力される。

data = spi.read( 32 )
      

write( *outputs ) -> nil

SPIバスへ、outputs で指定したデータを出力する。
outputsは、Integer, Array<Integer> もしくは String で指定する。

spi.write( 0x30, 0xa2 )
spi.write( "\x30\xa2" )
spi.write( 0x02, 0xee, 0xad, 0x00, data_string )  # useful for EEPROM
      

transfer( outputs, additional_read_bytes = 0 ) -> String

SPIバスへ outputs で指定したデータを出力しながら同時に入力する(汎用転送)
outputs は、Integer, Array<Integer> もしくは String で指定する。
additional_read_bytes を指定すると、そのバイト数分の 0x00 を output に続いて出力する。

s = spi.transfer( 0b0000_0101, 1 )  # s は 2バイトの String が返る
      

PWM

パルス幅変調機能をサポートするクラス。

コンストラクタ

PWM.new( pin, *params )

pin : 0~20 または "B1"や"A2"などの文字列
params : 定数参照
pin で示す物理ピンを指定して、PWM オブジェクトを生成する。
pin は標準的には整数で指定するが、"B1"等PIC固有のピン番号を文字列にて指定できる。
パラメータ frequency を指定すると、デューティー比50%で出力を開始する。
デューティー比50%以外で出力を開始したい場合には、パラメータ duty を同時に指定する。
オプションパラメータ
params type description
frequency Integer,Float 周波数の指定
freq 同上 同上
duty Integer,Float デューティー比の指定

# 1番ピンをPWM出力用としてオブジェクトを生成する。まだ出力はしない。
pwm1 = PWM.new( 1 )

# 1番ピンをPWM出力用としてオブジェクトを生成するとともに、周波数 440Hz デューティー比 30% で出力を開始する。
pwm1 = PWM.new( 1, frequency:440, duty:30 )
      

インスタンスメソッド

frequency( freq )

周波数を指定して出力を開始、もしくは周波数を変更する。
freq は、Integer もしくは Float で指定する。
0を指定すると、出力を停止する。
周波数を変更してもデューティー比は変更されない。

pwm1.frequency( 440 )   #  440Hzの出力
      

period_us( micro_sec )

1周期の時間(マイクロ秒)を指定して出力を開始、もしくは周期を変更する。
micro_sec は、Integerで指定する。
0を指定すると、出力を停止する。
周期を変更してもデューティー比は変更されない。

pwm1.period_us( 2273 )   # 1/2273us = 440Hz
      

duty( percent )

0から100までのパーセンテージを指定してデューティー比を変更する。 percentは、Integer もしくは Float で指定する。

pwm1.duty( 50 )
      

pulse_width_us( micro_sec )

1周期のONになる時間をマイクロ秒で指定する。
micro_sec は、Integerで指定する。
1周期よりも長い時間を指定された場合、最大のONにできる値で設定されエラーにはならない。

pwm1.pulse_width_us( 1000 )
      

UART

非同期シリアル通信をサポートするクラス。

コンストラクタ

UART.new( id=nil, *params )

id : 1 または 2(defaultは2)
id で示す物理ユニットを指定して、UART オブジェクトを生成する。
データビットは8のみ。
フロー制御は未実装のため、RTSCTSは指定できない。
パラメータデフォルト値
オプションパラメータ
baudrate Integer ボーレート (default 9600)
baud 同上
stop_bits Integer ストップビット (default 1)
parity Const パリティービット (default NONE)
txd_pin --- TxDピンの指定
rxd_pin --- RxDピンの指定
パラメータ用定数
UART::NONE
UART::EVEN
UART::ODD
UART::RTSCTS
      

# UART1を、全てデフォルトパラメータで使う。
uart1 = UART.new( 1 )

# 指定したデバイスノードを持つシリアルデバイスを、19200bps 偶数パリティーで使う。
uart2 = UART.new("/dev/cu.usbserial1", baud:19200, parity:UART::EVEN )
      

インスタンスメソッド

setmode( *params )

UARTのモード(パラメータ)を変更する。
パラメータの指定は、コンストラクタに準拠する。

uart1.setmode( baudrate:38400 )
      

read( read_bytes ) -> String

read_bytes で指定されたバイト数のデータを読み込む。
指定されたバイト数のデータが到着していない場合は、到着までブロックする。

val = uart1.read( 10 )
      

write( string ) -> Integer

データを送信する。
送信したバイト数を返す。

uart1.write("Output string\r\n")
      

gets() -> String

文字列を一行読み込む。内部的にはリードバッファ内の "\n" までのバイト列を返す。
1行のデータが到着していない場合は、到着までブロックする。

val = uart1.gets()
      

puts( string ) -> nil

1行送信し、引数 string が改行で終わっていない場合は改行コードを送信する。
改行コードは、LF

uart1.puts("Output string")
      

bytes_available() -> Integer

リードバッファに到着している読み込み可能バイト数を返す。

len = uart1.bytes_available()
      

bytes_to_write() -> 0

送信バッファが無いため常に0を返します

bytes = uart1.bytes_to_write()
      

can_read_line() -> bool

1行のデータを読み込むことができる場合は、true を返す。

flag = uart1.can_read_line()
      

flush()

送信バッファに溜まったデータの送信完了までブロックする。
送信バッファが無いため実際には何もしません。

uart1.flush()
      

clear_rx_buffer()

受信バッファをクリアする。

uart1.clear_rx_buffer()
      

clear_tx_buffer()

送信バッファをクリアする。
送信バッファが無いため実際には何もしません。

uart1.clear_tx_buffer()
      

send_break( time )

break 信号を送信する。
time はオプションで、秒で指定する。

uart1.send_break( 0.1 )
      

その他

leds_write(bit)

led制御
bit : 整数
led 10進数 2進数
1 1 0b0001
2 2 0b0010
3 4 0b0100
4 8 0b1000

sw()

スイッチの状態読み込み
戻り値:0 or 1

puts(txt)

文字列出力
ターミナルソフトの設定についてはこちら txt:文字列