UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
PadPS5USB.hpp
[詳解]
1//
2// 有線USB経由 PS5コントローラークラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6// Controller --[USB]--> USBHost --[SPI]--> Sender -->
7// ^^^^^^
8//
9// Raspberry Pi Pico SPI Pins:
10// CLK : 18
11// MOSI(TX): 19
12// MISO(RX): 16
13// CS : 17
14//
15// 本ヘッダーはUSB Host Shield 2.0ライブラリを使用しており、ヘッダーの量が多いため、使用する際は個別でインクルードすること。
16//
17
18#pragma once
19
20#include <Udon/Thirdparty/USB_Host_Shield_2.0/PS5USB.h>
21
24#include <Udon/Types/RGB.hpp>
26
27namespace Udon
28{
29
32 {
33 USB usb;
34
35 PS5USB pad;
36
37 Message::PadPS5 buttons;
38
39 public:
41 : usb()
42 , pad(&usb)
43 {
44 }
45
48 bool begin()
49 {
50 if (usb.Init() == -1)
51 {
52 return false;
53 }
54 else
55 {
56 return true;
57 }
58 }
59
61 void update()
62 {
63 usb.Task();
64 if (pad.connected())
65 {
66 buttons.isConnected = true;
67
68 buttons.triangle = pad.getButtonPress(ButtonEnum::TRIANGLE); // ▵
69 buttons.circle = pad.getButtonPress(ButtonEnum::CIRCLE); // ○
70 buttons.cross = pad.getButtonPress(ButtonEnum::CROSS); // ×
71 buttons.square = pad.getButtonPress(ButtonEnum::SQUARE); // □
72
73 buttons.up = pad.getButtonPress(ButtonEnum::UP); // ↑
74 buttons.right = pad.getButtonPress(ButtonEnum::RIGHT); // →
75 buttons.down = pad.getButtonPress(ButtonEnum::DOWN); // ↓
76 buttons.left = pad.getButtonPress(ButtonEnum::LEFT); // ←
77
78 buttons.l1 = pad.getButtonPress(ButtonEnum::L1);
79 buttons.r1 = pad.getButtonPress(ButtonEnum::R1);
80
81 buttons.l2 = pad.getButtonPress(ButtonEnum::L2);
82 buttons.r2 = pad.getButtonPress(ButtonEnum::R2);
83
84 buttons.l3 = pad.getButtonPress(ButtonEnum::L3); // 左スティック押し込み
85 buttons.r3 = pad.getButtonPress(ButtonEnum::R3); // 右スティック押し込み
86
87 buttons.create = pad.getButtonPress(ButtonEnum::SHARE /*CREATE*/); // 左上 \|/ ボタン
88 buttons.option = pad.getButtonPress(ButtonEnum::START /*OPTION*/); // 右上 ≡ ボタン
89
90 buttons.touch = pad.getButtonPress(ButtonEnum::TOUCHPAD); // タッチパッド
91 buttons.mic = pad.getButtonPress(ButtonEnum::MICROPHONE); // ミュートボタン
92 buttons.ps = pad.getButtonPress(ButtonEnum::PS); // PSボタン
93
94 buttons.analogRightX = +(pad.getAnalogHat(AnalogHatEnum::RightHatX) - 128); // 0~255 -> -128~127
95 buttons.analogRightY = -(pad.getAnalogHat(AnalogHatEnum::RightHatY) - 127); // 0~255 -> -128~127
96
97 buttons.analogLeftX = +(pad.getAnalogHat(AnalogHatEnum::LeftHatX) - 128); // 0~255 -> -128~127
98 buttons.analogLeftY = -(pad.getAnalogHat(AnalogHatEnum::LeftHatY) - 127); // 0~255 -> -128~127
99 }
100 else
101 {
102 buttons.clear();
103 }
104 }
105
109 {
110 return buttons;
111 }
112
115 void setLightBar(const Udon::RGB& color)
116 {
117 pad.setLed(color.r, color.g, color.b);
118 }
119
125 void setPlayerLamp(uint8_t mask = 0b011)
126 {
127 pad.setPlayerLed(mask);
128 }
129
132 void setMicLed(bool on = true)
133 {
134 pad.setMicLed(on);
135 }
136
140 void vibrate(uint8_t big = 100, uint8_t small = 100)
141 {
142 pad.setRumbleOn(big, small);
143 }
144 };
145
146
147 namespace Impl
148 {
149
153 template <typename Dummy = void>
155 : public PadPS5USB
156 {
157 public:
159
161
164
167
173 };
174 } // namespace Impl
175
177
178} // namespace Udon
ホストシールドがメイン基板に搭載されてる場合のPS5コントローラークラス
Definition PadPS5USB.hpp:156
Udon::Optional< MessageType > getMessage() const
メッセージを取得する
Definition PadPS5USB.hpp:169
オプショナル型
Definition Optional.hpp:62
有線USB経由PS5コントローラークラス
Definition PadPS5USB.hpp:32
void setLightBar(const Udon::RGB &color)
ライトバーの色を設定する
Definition PadPS5USB.hpp:115
bool begin()
コントローラーと通信開始
Definition PadPS5USB.hpp:48
Message::PadPS5 getMessage() const
Message::PadPS5型のメッセージを取得する
Definition PadPS5USB.hpp:108
void update()
更新
Definition PadPS5USB.hpp:61
PadPS5USB()
Definition PadPS5USB.hpp:40
void setPlayerLamp(uint8_t mask=0b011)
5つのプレイヤーのランプの点灯を設定する
Definition PadPS5USB.hpp:125
void vibrate(uint8_t big=100, uint8_t small=100)
バイブレーション
Definition PadPS5USB.hpp:140
void setMicLed(bool on=true)
マイクのLEDの点灯を設定する
Definition PadPS5USB.hpp:132
通信経由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