UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
PadPS5BT.hpp
[詳解]
1//
2// Bluetooth経由PS5コントローラークラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6// Controller --[Bluetooth]--> USBHost --[SPI]--> Sender -->
7// ^^^^^^
8//
9// ペアリング手順:
10// 1. コンストラクタの引数 pair に PAIR(true) を渡して書き込む
11// 2. コントローラーの \|/ボタン と PSボタン を同時に押し続ける
12// 3. コントローラーのLEDが点滅し始める
13// 4. ペアリングが完了するとLEDが点灯する
14//
15// 本ヘッダーはUSB Host Shield 2.0ライブラリを使用しており、ヘッダーの量が多いため、使用する際は個別でインクルードすること。
16//
17
18#pragma once
19
20#include <Udon/Thirdparty/USB_Host_Shield_2.0/PS5BT.h>
21
24#include <Udon/Types/RGB.hpp>
25
26namespace Udon
27{
28
31 {
32 USB usb;
33
34 BTD btd;
35
36 PS5BT pad;
37
38 Message::PadPS5 buttons;
39
40 public:
44 PadPS5BT(bool pair = false)
45 : usb()
46 , btd(&usb)
47 , pad(&btd, pair)
48 {
49 }
50
53 bool begin()
54 {
55 if (usb.Init() == -1)
56 {
57 return false;
58 }
59 else
60 {
61 return true;
62 }
63 }
64
66 void update()
67 {
68 usb.Task();
69 if (pad.connected())
70 {
71 if (pad.getButtonPress(ButtonEnum::PS))
72 {
73 pad.disconnect();
74 }
75
76 buttons.isConnected = true;
77
78 buttons.triangle = pad.getButtonPress(ButtonEnum::TRIANGLE); // ▵
79 buttons.circle = pad.getButtonPress(ButtonEnum::CIRCLE); // ○
80 buttons.cross = pad.getButtonPress(ButtonEnum::CROSS); // ×
81 buttons.square = pad.getButtonPress(ButtonEnum::SQUARE); // □
82
83 buttons.up = pad.getButtonPress(ButtonEnum::UP); // ↑
84 buttons.right = pad.getButtonPress(ButtonEnum::RIGHT); // →
85 buttons.down = pad.getButtonPress(ButtonEnum::DOWN); // ↓
86 buttons.left = pad.getButtonPress(ButtonEnum::LEFT); // ←
87
88 buttons.l1 = pad.getButtonPress(ButtonEnum::L1);
89 buttons.r1 = pad.getButtonPress(ButtonEnum::R1);
90
91 buttons.l2 = pad.getButtonPress(ButtonEnum::L2);
92 buttons.r2 = pad.getButtonPress(ButtonEnum::R2);
93
94 buttons.l3 = pad.getButtonPress(ButtonEnum::L3); // 左スティック押し込み
95 buttons.r3 = pad.getButtonPress(ButtonEnum::R3); // 右スティック押し込み
96
97 buttons.create = pad.getButtonPress(ButtonEnum::SHARE /*CREATE*/); // 左上 \|/ ボタン
98 buttons.option = pad.getButtonPress(ButtonEnum::START /*OPTION*/); // 右上 ≡ ボタン
99
100 buttons.touch = pad.getButtonPress(ButtonEnum::TOUCHPAD); // タッチパッド
101 buttons.mic = pad.getButtonPress(ButtonEnum::MICROPHONE); // ミュートボタン
102 buttons.ps = false; // PSボタン(無効)
103
104 buttons.analogRightX = +(pad.getAnalogHat(AnalogHatEnum::RightHatX) - 128); // 0~255 -> -128~127
105 buttons.analogRightY = -(pad.getAnalogHat(AnalogHatEnum::RightHatY) - 127); // 0~255 -> -128~127
106
107 buttons.analogLeftX = +(pad.getAnalogHat(AnalogHatEnum::LeftHatX) - 128); // 0~255 -> -128~127
108 buttons.analogLeftY = -(pad.getAnalogHat(AnalogHatEnum::LeftHatY) - 127); // 0~255 -> -128~127
109 }
110 else
111 {
112 buttons.clear();
113 }
114 }
115
119 {
120 return buttons;
121 }
122
125 void setLightBar(const Udon::RGB& color)
126 {
127 pad.setLed(color.r, color.g, color.b);
128 }
129
135 void setPlayerLamp(uint8_t mask = 0b011)
136 {
137 pad.setPlayerLed(mask);
138 }
139
142 void setMicLed(bool on = true)
143 {
144 pad.setMicLed(on);
145 }
146
150 void vibrate(uint8_t big = 100, uint8_t small = 100)
151 {
152 pad.setRumbleOn(big, small);
153 }
154 };
155
156
157 namespace Impl
158 {
159
163 template <typename Dummy = void>
165 : public PadPS5BT
166 {
167 public:
169
171
173 using PadPS5BT::PadPS5BT;
174
177
183 };
184 } // namespace Impl
185
187
188} // namespace Udon
ホストシールドがメイン基板に搭載されてる場合のPS5コントローラークラス
Definition PadPS5BT.hpp:166
Udon::Optional< MessageType > getMessage() const
メッセージを取得する
Definition PadPS5BT.hpp:179
オプショナル型
Definition Optional.hpp:62
Bluetooth経由PS5コントローラークラス
Definition PadPS5BT.hpp:31
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 update()
更新
Definition PadPS5BT.hpp:66
void setLightBar(const Udon::RGB &color)
ライトバーの色を設定する
Definition PadPS5BT.hpp:125
void setMicLed(bool on=true)
マイクのLEDの点灯を設定する
Definition PadPS5BT.hpp:142
PadPS5BT(bool pair=false)
コンストラクタ
Definition PadPS5BT.hpp:44
Message::PadPS5 getMessage() const
Message::PadPS5型のメッセージを取得する
Definition PadPS5BT.hpp:118
bool begin()
コントローラーと通信開始
Definition PadPS5BT.hpp:53
通信経由PS5コントローラークラス
Definition PadPS5.hpp:26
Definition Bit.hpp:12
PS5コントローラーのボタン情報
Definition PadPS5.hpp:21
bool cross
Definition PadPS5.hpp:26
void clear()
Definition PadPS5.hpp:57
int8_t analogRightX
Definition PadPS5.hpp:51
bool r2
Definition PadPS5.hpp:38
bool isConnected
Definition PadPS5.hpp:22
bool l2
Definition PadPS5.hpp:37
bool r3
Definition PadPS5.hpp:41
bool right
Definition PadPS5.hpp:30
bool down
Definition PadPS5.hpp:31
int8_t analogLeftY
Definition PadPS5.hpp:55
bool triangle
Definition PadPS5.hpp:24
bool square
Definition PadPS5.hpp:27
bool touch
Definition PadPS5.hpp:46
bool ps
Definition PadPS5.hpp:49
bool circle
Definition PadPS5.hpp:25
bool option
Definition PadPS5.hpp:44
bool l1
Definition PadPS5.hpp:34
bool left
Definition PadPS5.hpp:32
int8_t analogLeftX
Definition PadPS5.hpp:54
bool l3
Definition PadPS5.hpp:40
bool create
Definition PadPS5.hpp:43
bool r1
Definition PadPS5.hpp:35
bool mic
Definition PadPS5.hpp:48
bool up
Definition PadPS5.hpp:29
int8_t analogRightY
Definition PadPS5.hpp:52
RGB色空間
Definition RGB.hpp:21
ValueType r
赤成分
Definition RGB.hpp:27
ValueType g
緑成分
Definition RGB.hpp:30
ValueType b
青成分
Definition RGB.hpp:33