メリークリスマスクラッカー

いきなり話変わってえっ

昨日のWizardry自動戦闘のプログラムをメモってみます。

wikiなどを見ると、ホリパッド3ターボを買って…
ホリパッド3ターボ ブラック (USB接続対応)/ホリ
「×↓○」の順に連射ホールドすれば良いらしいひらめき電球
でもって、これをPICマイコンで実現してみるグッド!

あ、
この記事は知的好奇心を満たすための実験的なものなので、実用的ではありません。
ホリパッドを買った方が確実かと思いますかお

開発環境としては、
MPLAB C18 と、USB Framework v2.9b (Microchip Application Libraries v2011-10-18 Windows) を使います。

今回はこのUSBフレームワークのフォルダ内のサンプルプロジェクトを、そのまま改造してみました。
USB Device - HID - Joystick フォルダ内の、
USB Device - HID - Joystick - C18 - PICDEM FSUSB.mcp のプロジェクトを使いました。

ソースは、main.c です。これを改造します。
void Joystick(void) を次のように差し替えます。

--------------------------------------------
unsigned long counter = 0;
void Joystick(void)
{
if(!HIDTxHandleBusy(lastTransmission))
{
//入力をリセット
joystick_input.val[0] = 0x00;
joystick_input.val[1] = 0x00;
joystick_input.val[2] = 0x08;
joystick_input.val[3] = 0x80;
joystick_input.val[4] = 0x80;
joystick_input.val[5] = 0x80;
joystick_input.val[6] = 0x80;

//左アナログスティックは下に入れっぱなし
joystick_input.members.analog_stick.Y = 0xff;

//××↓↓○○と連打する
if (counter>100 && counter<200) joystick_input.members.buttons.x = 1;
if (counter>300 && counter<400) joystick_input.members.buttons.x = 1;
if (counter>500 && counter<600) joystick_input.members.hat_switch.hat_switch = HAT_SWITCH_SOUTH;
if (counter>700 && counter<800) joystick_input.members.hat_switch.hat_switch = HAT_SWITCH_SOUTH;
if (counter>900 && counter<1000) joystick_input.members.buttons.o = 1;
if (counter>1100 && counter<1200) joystick_input.members.buttons.o = 1;

//キーコード送信
lastTransmission = HIDTxPacket(HID_EP, (BYTE*)&joystick_input, sizeof(joystick_input));

Delay1KTCYx(12); //1msのウェイト(0.0833us*12*1000=1ms ※48MHzの場合)
if (++counter>=1200) counter=0;
}
return;
}
--------------------------------------------
ちなみに自分はPIC18F14K50を使いました。(→プロジェクトの使用マイコンの設定も変更の必要あり)

最初は×↓○でプログラミングしたものの、「調べる」コマンドのループ状態となって使えなかったガーン
ボタン押し時間を長めにして××↓↓○○としたら安定しましたパー
ホリパッド持ってないので本当の動作は分からないけど、とりあえずこれでいいやあせる