yamanekko版mruby-ev3rtのAPIリファレンス

## EV3RT
TOPPERS/EV3RTをmrubyから使用できるようにしたものです。
クラス名は[EV3RT C++ API](http://www.toppers.jp/ev3pf/EV3RT_CXX_API_Reference/index.html)、定数名は[EV3RT C API](http://www.toppers.jp/ev3pf/EV3RT_C_API_Reference/)に合わせています。

※ バランサークラス(EV3RT::Balancer)はETロボコン専用のクラスのため、ここには入れていません。(別記事で後日公開予定)

### 定数
#### ポート番号
#### `PORT_1`
#### `PORT_2`
#### `PORT_3`
#### `PORT_4`
#### `TNUM_SENSOR_PORT`

#### センサータイプ
#### `ULTRASONIC_SENSOR`
#### `GYRO_SENSOR`
#### `TOUCH_SENSOR`
#### `COLOR_SENSOR`
#### `TNUM_SENSOR_TYPE`

#### モーターポート
#### `PORT_A`
#### `PORT_B`
#### `PORT_C`
#### `PORT_D`
#### `TNUM_MOTOR_PORT`

#### モータータイプ
#### `NONE_MOTOR`
#### `MEDIUM_MOTOR`
#### `LARGE_MOTOR`
#### `UNREGULATED_MOTOR`
#### `TNUM_MOTOR_TYPE`

#### LEDカラー
#### `LED_OFF`
#### `LED_RED`
#### `LED_GREEN`
#### `LED_ORANGE`

#### ボタン
#### `LEFT_BUTTON`
#### `RIGHT_BUTTON`
#### `UP_BUTTON`
#### `DOWN_BUTTON`
#### `ENTER_BUTTON`
#### `BACK_BUTTON`
#### `TNUM_BUTTON`

#### シリアルポート
#### `SIO_PORT_UART`
#### `SIO_PORT_BT`
#### `SIO_PORT_LCD`


## EV3RT::Battery
本体のバッテリーの状態を取得するためのクラスです。

### コンストラクタ

#### `new()`

### インスタンスメソッド

#### `battery_voltage()`
バッテリーの電圧を取得します。
内部で`ev3_battery_voltage_mV()`を呼び出しています。

戻り値：バッテリーの電圧（mV）

※ 互換性のため「batteryVoltage()」も残していますが、将来的に廃止の予定です。

#### `battery_current()`
バッテリーの電流を取得します。
内部で`ev3_battery_current_mA()`を呼び出しています。

戻り値：バッテリの電流（mA）

※ 互換性のため「batteryCurrent()」も残していますが、将来的に廃止の予定です。


## EV3RT::Button
本体のボタンを操作するためのクラスです。

### コンストラクタ

#### `new(type)`
typeで指定されたボタンを操作できるようにします。
typeに指定できるものは、定数「ボタン」で定義してある定数です。

ex ) `button = EV3RT::Button.new(LEFT_BUTTON)`

### インスタンスメソッド

#### `pressed?`
ボタンの押下状態を取得します。
内部で`ev3_button_is_pressed()`を呼び出しています。

戻り値：
true:押されている状態
false:押されていない状態

## EV3RT::Clock

### コンストラクタ

#### `new()`
内部で保持している「開始時刻」に現在時刻(絶対時刻（マイクロ秒）)をセットします

### インスタンスメソッド

#### `reset()`
内部で保持している「開始時刻」を現在時刻（絶対時刻（マイクロ秒））にリセットします

#### `now()`
開始時刻からの経過時刻(現在時刻から内部で保持していた「開始時刻」を引いた値)を返します

戻り値：
開始時刻からの経過時刻（マイクロ秒）

#### `wait(duration)`
内部でTOPPERSの`dly_tsk(duration)`を呼び出しています。

#### `sleep(duration)`
内部でTOPPERSの`tslp_tsk(duration)`を呼び出しています。

#### `utim`
TOPPERSのget_utmで取得した値を返します。
（現在時刻(絶対時刻（マイクロ秒）)を取得します）

戻り値：
get_utmで取得した現在時刻

## EV3RT::ColorSensor
カラーセンサーを操作するクラスです。

### 定数
#### R
RGBのR

#### G
RGBのG

#### B
RGBのB

### 定数 カラーセンサーで識別できる色
#### COLOR_NONE
無色。数値で指定する場合は`0`

### BLACK
黒。数値で指定する場合は`1`

### BLUE
青。数値で指定する場合は`2`

### GREEN
緑。数値で指定する場合は`3`

### YELLOW
黄色。数値で指定する場合は`4`

### RED
赤。数値で指定する場合は`5`

### WHITE
白。数値で指定する場合は`6`

### BROWN
茶色。数値で指定する場合は`7`

### コンストラクタ

#### `new(port)`
portで指定されたポートに接続されているカラーセンサーを操作します。
portに指定できるものは、定数「ポート」で定義してある定数です。

### インスタンスメソッド

#### `brightness()`
カラーセンサーで反射光の強さを測定します。
内部で`ev3_color_sensor_get_reflect()`を呼び出しています。

戻り値：
反射光の強さ（0〜100）

#### `rgb`
R,G,Bの値を測定します。
内部で`ev3_color_sensor_get_rgb_raw`を呼び出しています。

戻り値：
R,G,Bの値をarrayで返します。

#### `rgb_part`
R,G,Bの値を測定し、引数で指定した一つだけ返します。
内部で`ev3_color_sensor_get_rgb_raw`を呼び出しています。

引数：
`R`または`0`,`G`または`1`,`B`または`2`のいずれか

戻り値：
引数で指定したRまたはGまたはBの値を返します。

#### `color`
色を測定します。
内部で`ev3_color_sensor_get_color`を呼び出しています。

戻り値：
測定結果の色を色番号（定数）で返します。


## EV3RT::Random
mrbgemのRandomをTOPPERSでも使用できるようにしたものです。
参考) [randomクラスについて](https://qiita.com/yamanekko/items/5d6fe00b704c2fa8e710#random%E3%82%AF%E3%83%A9%E3%82%B9)

### コンストラクタ

#### `new(seed=nil)`
seedが指定されている場合、seedを乱数のseedにすることができます。

### クラスメソッド

#### `rand(max=nil)`
maxが指定されている場合、0以上、max未満の整数を返します。
指定されていない場合は0.0以上1.0未満の実数を返します。

戻り値：生成した乱数

#### `srand(seed=nil)`
seedが指定されている場合、seedを乱数のseedにすることができます。

戻り値：前回のseedを返します。

### インスタンスメソッド

#### `rand(max=nil)`
maxが指定されている場合、0以上、max未満の整数を返します。
指定されていない場合は0.0以上1.0未満の実数を返します。

戻り値：生成した乱数

#### `srand(seed=nil)`
seedが指定されている場合、seedを乱数のseedにすることができます。

戻り値：前回のseedを返します。

## EV3RT::GyroSensor
ジャイロセンサーを操作するクラスです。

### コンストラクタ

#### `new(port)`
portで指定されたポートに接続されているジャイロセンサーを操作します。
portに指定できるものは、定数「ポート」で定義してある定数です。

### インスタンスメソッド

#### `angler_velocity()`
ジャイロセンサーで角速度を測定した値を返します。
内部で`ev3_gyro_sensor_get_rate()`を呼び出しています。

戻り値：角位置（単位は度/秒）

#### `reset()`
ジャイロセンサーの角位置をゼロにリセットします。
内部で`ev3_gyro_sensor_reset()`を呼び出しています。

## EV3RT::LCD
本体の液晶画面を操作するクラスです。

### コンストラクタ

#### `new()`

### クラスメソッド

#### `print(message)`
messageに指定された文字列をLCD（本体前面の液晶画面）に表示します。
前に表示していたものを消去してから書きます。

## EV3RT::LED
本体についているLEDのON, OFFをするクラスです。

### コンストラクタ

#### `new()`

### インスタンスメソッド

#### `on(color)`
colorに指定された色で本体のLEDを点灯します。
可能な色は(EV3RT::GREEN, EV3RT::ORANGE, EV3RT::RED)です。
内部で`ev3_led_set_color()`を呼び出しています。

#### `off()`
本体のLEDを消灯します。
内部で`ev3_led_set_color()`を呼び出しています。

## EV3RT::Motor
モーターを操作するクラスです。

### コンストラクタ

#### `new(port, motor_type)`
portで指定されたポートに接続されているモーターを操作します。
portに指定できるものは、定数「ポート」で定義してある定数です。
motor_typeはportに接続されたモーターの種類を指定します。
motor_typeに指定できるものは、定数「モータータイプ」で定義してある定数です。

### インスタンスメソッド

#### `count()`
モーターの角位置を取得します。
内部で`ev3_motor_get_counts()`を呼び出しています。

戻り値：モーターの角位置（単位は度）。負の値は逆方向に回されたことを示します。

#### `reset`
モーターの角位置をゼロにリセットします。
モータの角位置センサの値を設定するのみ。モータの実際のパワーと位置に影響を与えません。
内部で`ev3_motor_reset_counts()`を呼び出しています。

#### `pwm=(value)`
valueには-100〜100が設定可能です。（負の値の場合はモーターが逆回転します）
valueが0の場合、モーターをブレーキモードで停止します。
valueが0以外の場合、モーターのパワーをvalueに設定します。

valueが0の場合は、内部で`ev3_motor_stop(port, true)`を呼び出しています。
valueが0以外の場合は、内部で`ev3_motor_set_power()`を呼び出しています。
※ power=と同じです。

#### `power=(value)`
valueには-100〜100が設定可能です。（負の値の場合はモーターが逆回転します）
valueが0の場合、モーターをブレーキモードで停止します。
valueが0以外の場合、モーターのパワーをvalueに設定します。

valueが0の場合は、内部で`ev3_motor_stop(port, true)`を呼び出しています。
valueが0以外の場合は、内部で`ev3_motor_set_power()`を呼び出しています。

※ pwm=と同じです。

#### `rotate(degrees, speed, blocking)`
degrees 回転角度，マイナスの値でモータを逆方向に回転させることができます。
speed 回転速度，モータのフルスピードのパーセント値。0~100が設定可能です。
blocking true (回転が完了するまで待ちます)， false (回転操作を待たずに戻ってきます。)

モーターを指定した角度分回転させます。
内部で`ev3_motor_rotate()`が呼ばれます。

#### `stop()`
モーターを停止します。
（ブレーキをかけずに停止します。ブレーキをかけたい場合はPWM=0またはpower=0で呼んでください）
内部で`ev3_motor_stop(port, false)`が呼ばれます。

## EV3RT::Serial
シリアル通信の送受信を行います。

### コンストラクタ

#### `new(serial_port)`
serial_portにログの出力先を指定します。
Bluetooth経由でログを送る場合は`SIO_PORT_BT`を指定してください。

### インスタンスメソッド

#### `write(message)`
messageで指定された文字列を出力します。
内部で`serial_wri_dat`が呼ばれます。

#### read_byte
1byte受信します。
ETロボコンのリモートスタートで使用することを想定しています。

## EV3RT::SonarSensor
超音波センサー用のクラスです。
（TOPPERS C++ APIでは超音波センサークラスはSonarSensor、TOPPERS C APIではUltrasonic sensorなので注意してください）

### コンストラクタ

#### `new(port)`
portで指定されたポートに接続されている超音波センサーを操作します。
portに指定できるものは、定数「ポート」で定義してある定数です。

### インスタンスメソッド

#### `distance()`
超音波センサーで距離を測定します。

戻り値：距離（単位はセンチ）

## EV3RT::Sound
本体から音を鳴らすクラスです。

### コンストラクタ

#### `new()`

### インスタンスメソッド

#### `volume(value)`
音量を調整します。

value ボリュームの値を0〜100の範囲で指定します。0を指定した場合はミュートになります。


#### `play_tone(frequency, duration)`
音を鳴らします。

frequency トーンの周波数（鳴らしたい音を定数で指定します。）
duration 出力持続時間（ミリ秒） SOUND_MANUAL_STOPを指定した場合は手動で停止する(offする)までなり続けます。

#### `off`
音を止めます。

## EV3RT::Task
RTOSのタスク操作関連のクラスです。

### クラスメソッド

#### `sleep(timeout)`
引数を指定しない場合にはTOPPERSのslp_tsk()、
引数を指定した場合にはTOPPERSのtslp_tsk(timeout)が呼ばれます。

#### `delay(duration)`
TOPPERSのdly_tsk(duration)が呼ばれます。

#### `wakeup(task_id)`
TOPPERSのwup_tsk(task_id)が呼ばれます。

#### `active(task_id)`
TOPPERSのact_tsk(task_id)が呼ばれます。

#### `exit`
TOPPERSのext_tsk()が呼ばれます。

#### `start_cyclic(task_id)`
TOPPERS/EV3RTのev3_sta_cyc(task_id)が呼ばれます。

#### `stop_cyclic(task_id)`
TOPPERS/EV3RTのev3_stp_cyc(task_id)が呼ばれます。

## EV3RT::TouchSensor
タッチセンサーを操作するクラスです。

### コンストラクタ

#### `new(port)`
portで指定されたポートに接続されているタッチセンサーを操作します。
portに指定できるものは、定数「ポート」で定義してある定数です。

### インスタンスメソッド

#### `pressed?()`
タッチセンサーの状態を検出します。

戻り値： true 押されている、false 押されていない