こちらの記事を読んでやりたくなって、ELEGOO UNO R3 を買って試してみました。
やっぱりめちゃくちゃ楽。しかし一つだけ欠点があって…
『電池の減りが心配』ということ。
じゃあドック接続すればいいじゃんと思いやってみると、Proコンの接続まではいいんだけどAキーを押さないと画面が戻れずめちゃくちゃずれる。
じゃあAボタンを押す動作を追加しようというわけで
上の記事でも使っているSwitch-Fightstick
のJoystick.c
を編集します。
# @@ -181,6 +181,10 @@ void GetNextReport(USB_JoystickReport_Input_t* const ReportData) {
switch (state)
{
case SYNC_CONTROLLER:
+ if (report_count == 10)
+ {
+ ReportData->Button |= SWITCH_A;
+ }
if (report_count > 100)
{
report_count = 0;
Joystick.c
の181行目付近、GetNextReport()
内のswitch文に書き加えます。
内容は簡単で、report_count
が10回目の時にAボタンを送信しているだけです。つまりデバイスが認識されてからAボタンを押して画面を戻しているわけです。
別に10カウントに意味はありません。読み込んでからある程度置きたいなって思ったからです。心配なら書き始める判定をしているのが追記部分の1行下のダメでした。普通によくわからんズレ起きます。ここ書き換えなくても失敗することはなさそうです。report_count > 100
なのでこの100
をもう少し大きくしてやるといいかも。
あとは記事通りにmake
してdfu-programmer
で書き込んで完成です。
まとめ
すぐ実装できて簡単に接続できるようになったのでいいとおもいました!(小並感)
追記 (2022/09/16 2:00)
書き終わった後そのままにしておくとスリープでロストすることが多々あったので修正。
# @@ -221,9 +229,10 @@ void GetNextReport(USB_JoystickReport_Input_t* const ReportData) {
state = MOVE_X;
break;
case STOP_Y:
if (ypos < 120 - 1)
+ {
state = MOVE_Y;
+ }
else
+ {
+ ReportData->Button |= SWITCH_MINUS;
state = DONE;
+ }
break;
case MOVE_X:
マイナスキーでとりあえず保存するようにしました。あとはもう一回開いたときに保存されてるようになってます。
さらに僕の環境だと1番細いペンに自動でならなかったので修正。
# @@ -197,6 +201,10 @@ void GetNextReport(USB_JoystickReport_Input_t* const ReportData) {
report_count++;
break;
case SYNC_POSITION:
+ if (report_count == 200)
+ {
+ ReportData->Button = SWITCH_L;
+ }
if (report_count == 250)
{
report_count = 0;
Lボタンを押して調整するようにしてあります。