PadPS5
クラスを用いることでメインマイコンで PS5 コントローラの情報を取得出来ます。
このクラスはテンプレートクラスになっており、受信クラスを指定します。CAN、I2C、E220、USB、Bluetooth などの通信方式に対応しています。
個別インクルード
インスタンス化
Udon::PadPS5
クラスはテンプレートクラスになっており、引数に受信クラスを指定することで通信方式を選択できます。
引数に指定した受信クラスをPadPS5
クラスが継承するため、受信クラスのメンバ関数をそのまま使用できます。同様にコンストラクタも継承されます。受信クラスのテンプレート引数には Udon::Message::PadPS5
が指定されます。
例えば CAN 経由でコントローラの情報を取得する場合、以下のように記述できます。
Teensy用 CANバスクラス
Definition CanBusTeensy.hpp:31
通信経由PS5コントローラークラス
Definition PadPS5.hpp:26
記述が長いため、エイリアスを使用することをお勧めします。
static Udon::CanPadPS5 pad{ bus, id };
その他の通信方式でのエイリアス
I2C
static Udon::I2cBus bus{ Wire };
static Udon::I2cPadPS5 pad{ bus, address };
E220 (無線モジュール)
static Udon::E220PadPS5 pad({
.serial = Serial1,
.m0 = 2,
.m1 = 3,
.aux = 4,
});
メインマイコンと USB ホストシールドが直接接続されている場合 (Bluetooth 使用時)
Udon.hpp とは別に PadPS5BT.hpp にインクルードする必要があります(依存ライブラリのサイズが大きいため)
PadPS5< Impl::PadPS5OnboardBTReader > PadPS5OnboardBT
Definition PadPS5BT.hpp:186
メインマイコンと USB ホストシールドが直接接続されている場合 (USB 使用時)
PadPS5< Impl::PadPS5OnboardUSBReader > PadPS5OnboardUSB
Definition PadPS5USB.hpp:176
- OpenSiv3D を使用している場合
PC と USB ケーブルで接続すると使用できます。
PadPS5< Impl::SivPadPS5Reader > SivPadPS5
OpenSiv3D用 PS5コントローラー
Definition SivPadPS5.hpp:81
通信開始 (Optional)
本クラスは通信の管理は行わず、受信クラスから受け取ったデータの解析のみを行います。故に begin
メンバ関数はありません。通信の開始処理が必要な受信クラスを使用している場合、通信開始処理を行う必要があります。
void setup()
{
}
bool begin()
コントローラーと通信開始
Definition PadPS5BT.hpp:53
PadPS5
クラスに begin
メンバ関数がないのに呼び出せているのは、PadPS5
クラスが受信クラスを継承していて、受信クラスの begin
メンバ関数を引き継いでいるためです。
更新 (必須)
ループ内で update
メンバ関数を呼ぶ必要があります。受信クラスに update
メンバ関数が実装されている場合、自動的に呼び出されます。
void loop()
{
}
void update(int deadZone=20) noexcept
更新
Definition PadPS5.hpp:144
遠隔非常停止の実装
ロボコンのルール上、遠隔非常停止を実装する必要があります。✕ボタンで非常停止を掛けるとすると、以下のように記述できます。コントローラが接続されているかは operator bool
で取得できます。
void loop()
{
{
omni.move(stick);
}
else
{
omni.stop();
}
}
Input getCross() const noexcept
×ボタン
Definition PadPS5.hpp:82
複数の bool 値を扱うとややこしくなるため、非常停止を行うべきかを判断するための isEmergencyStop
、また逆の動作可能かを判断するための isOperable
メンバ関数を提供しています。内部的には上記の処理と同等です。
void loop()
{
{
omni.move(stick);
}
else
{
omni.stop();
}
}
bool isOperable() const noexcept
動作可能であるか
Definition PadPS5.hpp:70
ボタン
次のようにボタンの状態を Input
オブジェクトとして取得できます。
void loop()
{
}
Input getDown() const noexcept
十字キー下
Definition PadPS5.hpp:94
Input getPs() const noexcept
PSボタン
Definition PadPS5.hpp:130
Input getCircle() const noexcept
○ボタン
Definition PadPS5.hpp:79
Input getRight() const noexcept
十字キー右
Definition PadPS5.hpp:91
Input getLeft() const noexcept
十字キー左
Definition PadPS5.hpp:97
Input getR3() const noexcept
右スティック押し込み
Definition PadPS5.hpp:115
Input getL2() const noexcept
L2ボタン
Definition PadPS5.hpp:106
Input getCreate() const noexcept
クリエイトボタン(左上ボタン)
Definition PadPS5.hpp:118
Input getL3() const noexcept
左スティック押し込み
Definition PadPS5.hpp:112
Input getUp() const noexcept
十字キー上
Definition PadPS5.hpp:88
Input getSquare() const noexcept
□ボタン
Definition PadPS5.hpp:85
Input getTriangle() const noexcept
▵ボタン
Definition PadPS5.hpp:76
Input getR2() const noexcept
R2ボタン
Definition PadPS5.hpp:109
Input getOption() const noexcept
オプションボタン(右上ボタン)
Definition PadPS5.hpp:121
Input getR1() const noexcept
R1ボタン
Definition PadPS5.hpp:103
Input getTouch() const noexcept
タッチパッドボタン
Definition PadPS5.hpp:124
Input getL1() const noexcept
L1ボタン
Definition PadPS5.hpp:100
Udon::Input
オブジェクトは以下の様に定義されており、各ボタンの押された瞬間、離した瞬間等を取得できます。
struct Input
{
bool press;
bool click;
bool release;
bool toggle;
};
スティック
以下の関数から左右のスティックの値を Udon::Vec2
オブジェクトして取得可能です。Vec2 クラスの詳細は こちら
void loop()
{
}
Vec2 getRightStick() const noexcept
右スティック [x,y: -255~255]
Definition PadPS5.hpp:136
Vec2 getLeftStick() const noexcept
左スティック [x,y: -255~255]
Definition PadPS5.hpp:133
二次元ベクトル
Definition Vector2D.hpp:22
Vec2
オブジェクトは以下の様に定義されており、各スティックの X, Y 軸の傾きを取得できます。スティックの上方向が X 軸の正、右方向が Y 軸の正です。
struct Vec2
{
double x;
double y;
};
ValueType x
X成分
Definition Vector2D.hpp:28
また、Stick
オブジェクトを取得できる関数もあります。Stick
オブジェクトとはロボットの移動に必要な入力成分 (移動: 左 X,Y、旋回: 右 X) をまとめたオブジェクトで、このオブジェクトを用いてオムニホイールの出力値を求めたりすることもできます。
Stick getMoveInfo() const noexcept
ロボットの移動に必要なスティックの情報 Udon::Stick オブジェクト {{x,y},turn} を取得
Definition PadPS5.hpp:140
Pos Stick
Definition Position.hpp:259
Stick
オブジェクトは以下の様に定義されています。
struct Stick
{
Vec2 vector;
double turn;
};
std::array< double, N > toOmni() const
Definition Position.hpp:161
最終的なスケッチ例 (CAN 経由)
static Udon::CanPadPS5 pad{ bus, 0x006 };
void setup()
{
}
void loop()
{
{
Serial.println("circle clicked");
}
{
}
else
{
}
delay(1);
}
void update()
バス更新
Definition CanBusTeensy.hpp:89
void begin()
通信開始
Definition CanBusTeensy.hpp:37
メインマイコンと USB ホストシールドが直接接続されている場合
コントローラに内蔵されている LED や、バイブレーションを動作させられます。
void setup()
{
}
void loop()
{
}
void setPlayerLamp(uint8_t mask=0b011)
5つのプレイヤーのランプの点灯を設定する
Definition PadPS5BT.hpp:135
void vibrate(uint8_t big=100, uint8_t small=100)
バイブレーション
Definition PadPS5BT.hpp:150
void setLightBar(const Udon::RGB &color)
ライトバーの色を設定する
Definition PadPS5BT.hpp:125
void setMicLed(bool on=true)
マイクのLEDの点灯を設定する
Definition PadPS5BT.hpp:142