Dual Shock3の値をESP32を介して、もらってくるプログラム
ps3pad.cpp
- Committer:
- bbbt25
- Date:
- 2019-03-10
- Revision:
- 0:0c075d7b8abd
File content as of revision 0:0c075d7b8abd:
#include "mbed.h" #include "ps3pad.h" //---------------------------------------------------------- // PS3 PAD //オリジナルの ESP32 + miniUSBHostShield + DualShock3 モジュールとSPI通信をして //mbedで使えるようにするためのライブラリです。 //ESP32側のSPIslaveの問題で、通信に失敗するとESP32が落ちる( ˘ω˘) という問題があるので、誰かデバッグプリーズ //どうでもいいけど、出来る限りUARTの通信速度は115200くらいまで上げると、ラグが生じない //Serial pc(USBTX,USBRX,115200);と宣下の上、普段のprintfの前にpc.をつける //pc.printf("Hello\r\n"); 的な //---------------------------------------------------------- Ps3pad::Ps3pad(PinName miso, PinName mosi, PinName cs, PinName sclk) : ds3con(mosi,miso,sclk), ss(cs){ ds3con.format(8,3); ds3con.frequency(1000000); memset(send,0,19); memset(get,0,19); for(int i=0;i<4;i++)get[i]=127; //コントローラのホームポジションにセット Ps3init(); } void Ps3pad::Ps3init(void){ //初期化 getTiming.attach(callback(this, &Ps3pad::getValues),0.001); } void Ps3pad::getValuesStop(void){ //使わないほうがいい? // getTiming.detatch(); } void Ps3pad::getValues(void){ int i; // memset(ret,'\0',sizeof(ret)/sizeof(ret[0])); uint8_t temp; for(i=0;i<4;i++)get[i]=127; //コントローラの初期状態に設定(変な動きをしないように) for(i=4;i<19;i++)get[i]=0; ss=0; //書き込みの合図(LOW) wait_us(10); for(i=0;i<19;i++){ get[i]=__rbit(ds3con.write(__rbit(send[i] << 24)) << 24); //何やってるか忘れたワロス temp=0; for(int j=0;j<8;j++){ temp += ((get[i]>>j) &(0x01))<<(7-j); //MSBをLSBに変換する } get[i]=temp; wait_us(10); } ss=1; left_x = get[0]-128; left_y = -(get[1]- 128+1); right_x = get[2]-128; right_y = -(get[3]- 128+1); BUTTON.ANALOG.L1 = get[4]; BUTTON.ANALOG.L2 = get[5]; BUTTON.ANALOG.R1 = get[6]; BUTTON.ANALOG.R2 = get[7]; BUTTON.ANALOG.SANKAKU = get[8]; BUTTON.ANALOG.MARU = get[9]; BUTTON.ANALOG.BATU = get[10]; BUTTON.ANALOG.SIKAKU = get[11]; BUTTON.ANALOG.UP = get[12]; BUTTON.ANALOG.RIGHT = get[13]; BUTTON.ANALOG.DOWN = get[14]; BUTTON.ANALOG.LEFT = get[15]; BUTTON.BIT.HOME = get[16]; BUTTON.BIT.SELECT = get[17]; BUTTON.BIT.START = get[18]; }