Ver Tikutaikai

Dependencies:   mbed SBDBT BNO055 YKNCT_MD YKNCT_I2C

main.h

Committer:
ac0314naga
Date:
2021-10-12
Revision:
0:c527a14d991a
Child:
1:fa3652aca312

File content as of revision 0:c527a14d991a:

/* Includes ------------------------------------------------------------------*/

#ifndef MAIN_H
#define MAIN_H

#include <mbed.h>
#include <BNO055.h>
#include <SBDBT.h>
#include <YKNCT_I2C.h>
#include <YKNCT_MD.h>

/* 型定義 --------------------------------------------------------------------*/

struct LOCATION {
    double X;
    double Y;
    double Theta;
    
public:
    /* 全部リセットしちゃうぞぉ♡ */
    void reset(void){
        X=-2000;
        Y=-2000;
        Theta=180;
    }
};

struct COORDINATE {
    double X;
    double Y;
    double Theta;
    int Time;
    int optionInjection;
    bool optionRod;
    int optionRibbon;
};



/* 射出管理構造体 */
class INJECTION
{
public:
    INJECTION(PinName p1, PinName p2, PinName p3) 
    : limitTop(p1), limitBottom(p2), limitMagazine(p3){

        BallShotTim.start();

        encDeg[0]=0;
        encDeg[1]=0;
        encDeg[2]=0;
        actNum=1;
        
        targetRps[0]=-27;
        targetRps[1]=27;
    }
    
    int actNum;             //射出シーケンス
    int initalDeg;          //装填機構の目標角度
    double encDeg[3];       //機体別の現在角度保存領域
    int moveMotor[3];       //機体別モーター値保存領域
    double updateVal[2][2]; //速度型PID
    int isBallLoading;      //ボールが装填準備状態になっているか
    int isMove;             //動作可能状態にあるか
    double EncDegDiff[2][2];//エンコーダー角度の差
    double velDev[2][3];    //速度PID 偏差の一時保存領域
    double loadDev[2];      //位置PID 偏差の一時保存領域
    
    /* 目標回転数 */
    int targetRps[2];

    DigitalIn limitTop;//上リミット
    DigitalIn limitBottom;//下リミット
    DigitalIn limitMagazine;//装填リミット

    Timer BallLoadTim;  //グルグルに乗るまで
    Timer BallShotTim;  //グルグルからカップに乗るまで
    
    void MainFunction();
    double RotationPerWhile(double degree, int num);
    double VelocityPID(double Target_value, double Current_value, int motorNum);
    double LoadingPID(double Target_value, double Current_value);
};


/* 定数定義 ------------------------------------------------------------------*/

/* π */
#define PI 3.1415926535

/* モーターの最大数 */
#define MotorMAX 11

/* エンコーダーの最大数 */
#define EncoderMAX 8


/* マクロ定義 ----------------------------------------------------------------*/

/* Enc角度から距離に変換 */
#define DEG_TO_DIS(__DEGREE__) (100 * PI * (__DEGREE__) / 360)

/* radian degree 変換 */
#define DEG_TO_RAD(__DEGREE__) ((__DEGREE__)*PI / 180)
#define RAD_TO_DEG(__RADIAN__) ((__RADIAN__)*180 / PI)

#define ROUND(_DATA_) ((int)((_DATA_)*10)%10<=3?(_DATA_):(_DATA_)+1)

//350 800
#define STEP(_STEP_) ((_STEP_ > 2) ? 400 : 800)


/* コントローラー SerectとStartを実装 */
//#define Select (DS3.LEFTkey+DS3.RIGHTkey==2)
//#define Start (DS3.UPkey+DS3.DOWNkey==2)

/* 関数プロトタイプ宣言 -------------------------------------------------------*/
/* 変数定義 ------------------------------------------------------------------*/
/* クラス定義 ----------------------------------------------------------------*/
#endif /* MAIN_H */