Communicate with PS3 controller

Dependencies:   omni_wheel PID jy901 solenoid Master kohiMD lpf SerialArduino RCJESC

main.cpp

Committer:
piroro4560
Date:
2022-06-14
Revision:
1:692623e55ff7
Parent:
0:00ce070b2f06
Child:
2:7da4a8e74955

File content as of revision 1:692623e55ff7:

/** 300_PS3com
 * PS3と通信して表示、ボタンに応じてモーターを動かす
 * モーターのピン確認、通信の確認用
 * ButtonEnumを実装したい
 * ライブラリの実装したい
 */

//--------操作方法--------
// ボタン1:モード変更
// ボタン2:スタート、ストップ
// ボタン3:動作1
// ボタン4:動作2


#include "main.h"
#include "Master.h"
#include "SerialArduino.h"

#define PS3COM 1
#define PS3UI  0

DigitalOut led(LED1);
Master Master;// 出力等の基本クラス

#if PS3COM
SerialArduino mini(A0, A1, 115200);// Arduinoを用いてPS3コントローラと通信するクラス
void PS3get(void);
#endif

#if PS3UI
DigitalIn uiToggle[3] = {};
DigitalIn uiButton();
#endif

uint8_t h1,h2;
bool    b[12]= {};
uint8_t st[4]= {};
uint8_t tr[2]= {};

int main()
{
    uint8_t mode=0;
    bool EdgeToggle[3]= {};
    bool pretoggle[3]= {};

    double  pwm[4] = {};

    Master.SetPS3Address(b, tr, st);
// 以下ループ
    while (true) {

// モーター出力値の計算
        for(int i=0; i < 4; i++) {
            if (b[i+4]) {
                pwm[i] = 0.5;
            } else if (b[i+4+4]) {
                pwm[i] = -0.5;
            } else {
                pwm[i] = 0;
            }
        }

#if PS3COM
        PS3get();
#endif

#if PS3UI
        for (int i=0; i<3; i++) {
            if (preToggle[i] && !((int)uiToggle[i])) EdgeToggle = 1;
            preToggle[i] = (int)uiToggle[i];
        }
        if (uiButton) {
            switch mode {
            case 0:
                Master.PS3Com();
                    break;
                case 1:
                    Master.Shot();
                    break;
                case 2:
                    Master.Dribble();
                    break;
            }
        }
#endif
        for (int i=0; i<4; i++) {
            Master.SetValueMotor(i, pwm[i]);
        }
    }
}

#if PS3COM
void PS3get(void)
{
    h1 = mini.getHedder1();
    h2 = mini.getHedder2();
    for(int i=0; i<12; i++) {
        b[i] = mini.getButton(i);
    }
    for(int i=0; i<2; i++) {
        tr[i] = mini.getTrigger(i);
    }
    for(int i=0; i<4; i++) {
        st[i] = mini.getStick(i);
    }
    for(int i=0; i<12; i++) printf("%d ",b[i]);
    printf("|");
    for(int i=0; i<2; i++) printf("%3d ",tr[i]);
    printf("|");
    for(int i=0; i<4; i++) printf("%3d ",st[i]);
    if(mini.getState()) printf("ok");
    else printf("bad");
    printf("\r\n");
}
#endif