RPi2GPIO
FRONT PAGE

コレは何?/What is this?

ラズベリーパイ2のGPIOを制御するクラス。


メンバ関数と定義一覧

            enum IOmode {    // 入出力モード設定用
                IN,
                OUT
            };
            
            RPi2GPIO();        // コンストラクタ (コンストラクタ実行時に自動的にとりあえずすべて出力モードになります)
            ~RPi2GPIO();    // デストラクタ
            void SetConfig(int port, IOmode mode);        // 入出力を設定する関数 port : GPIO番号,mode : RPi2GPIO::IN or RPi2GPIO::OUT
            void SetConfig_GPIO9to0(uint32_t bitdata);    // GPIO9~0の設定レジスタを一括設定する関数
            void SetConfig_GPIO19to10(uint32_t bitdata);// GPIO19~10の設定レジスタを一括設定する関数
            void SetConfig_GPIO29to20(uint32_t bitdata);// GPIO29~20の設定レジスタを一括設定する関数
            void SetConfig_GPIO39to30(uint32_t bitdata);// GPIO39~30の設定レジスタを一括設定する関数
            void SetConfig_GPIO49to40(uint32_t bitdata);// GPIO49~40の設定レジスタを一括設定する関数
            void SetConfig_GPIO53to50(uint32_t bitdata);// GPIO53~50の設定レジスタを一括設定する関数
            void SetConfig_AllOutput(void);                // すべてのGPIOピンを出力モードに設定する関数
            void SetBitDataLo(uint32_t bitdata);        // GPIO31~0 からビットデータを一括出力する関数
            void SetBitDataHi(uint32_t bitdata);        // GPIO39~32 からビットデータを一括出力する関数
            void BitSet(unsigned int port);                // 指定したGPIOを 1 にする関数
            void BitClear(unsigned int port);            // 指定したGPIOを 0 にする関数
            uint32_t GetBitDataLo(void);                // GPIO31~0 からデータを一括入力する関数
            uint32_t GetBitDataHi(void);                // GPIO53~32 からデータを一括入力する関数
            bool BitGet(unsigned int port);                // 指定したGPIOからビットの状態を取得する関数
            void SetACTLED(bool onoff);                    // ACT LED の点灯を制御する関数 onoff=trueでオン、onff=falseでオフ
            void SetPWRLED(bool onoff);                    // PWR LED の点灯を制御する関数 onoff=trueでオン、onff=falseでオフ

使用例

                #include "RPi2GPIO.hh"

     1 :	void ControlFunctions::ControlFunction1(ControlFunctions* pCF){
     2 :	    // 制御用周期実行関数1
     3 :	    
     4 :	    // 制御用定数設定
     5 :	    const float Ts = ConstParams::SAMPLING_TIME[0]*1e-9;    // [s]        制御周期
     6 :	    
     7 :	    // 制御用変数宣言
     8 :	    static bool loopflag = true;
     9 :	    
    10 :	    // 制御器等々
    11 :	    static RPi2GPIO* gpio;
    12 :	    
    13 :	    if(pCF->CmdFlag==CTRL_INIT){
    14 :	        // 初期化モード (ここは制御開始時に1度だけ呼び出される(非実時間空間なので重い処理もOK))
    15 :	        gpio = new RPi2GPIO();
    16 :	        gpio->SetConfig(20, RPi2GPIO::IN);    // GPIO20を入力にする場合の例
    17 :	    }
    18 :	    if(pCF->CmdFlag==CTRL_LOOP){
    19 :	        // 周期モード (ここは制御周期 SAMPLING_TIME[0] 毎に呼び出される(実時間空間なので処理は制御周期内に収めること))
    20 :	        pCF->count++;        // ループカウンタを進める
    21 :	        t=pCF->count*Ts;    // 時刻の計算
    22 :	        
    23 :	        // 制御ここから
    24 :	        pCF->pIF->GetTorque(TorqueRes);        // [Nm] トルク応答値の取得
    25 :	        pCF->pIF->GetPosition(PositionRes);    // [rad] 位置応答値の取得
    26 :	        
    27 :	        // ここにやりたい制御を書くがよい!!
    28 :	        // GPIO21から方形波を出力する
    29 :	        if(loopflag == true){
    30 :	            gpio->BitSet(21);
    31 :	            loopflag = false;
    32 :	        }else{
    33 :	            gpio->BitClear(21);
    34 :	            loopflag = true;
    35 :	        }
    36 :	        
    37 :	        pCF->pIF->SetCurrent(CurrentRef);    // [A] 電流指令値の出力
    38 :	        // 制御ここまで
    39 :	        
    40 :	        // 任意変数値表示用
    41 :	        pCF->IndicVars[0] = 0;    // 表示変数
    42 :	        pCF->IndicVars[1] = 0;    // 表示変数
    43 :	        pCF->IndicVars[2] = 0;    // 表示変数
    44 :	        pCF->IndicVars[3] = 0;    // 表示変数
    45 :	        pCF->IndicVars[4] = 0;    // 表示変数
    46 :	        pCF->IndicVars[5] = 0;    // 表示変数
    47 :	        pCF->IndicVars[6] = 0;    // 表示変数
    48 :	        pCF->IndicVars[7] = 0;    // 表示変数
    49 :	        
    50 :	        // 任意変数プロット
    51 :	        pCF->PlotVars[0] = 0;
    52 :	        pCF->PlotVars[1] = 0;
    53 :	        
    54 :	        // データの保存
    55 :	        pCF->Data[0] = t;    // [s]    時刻の保存
    56 :	        pCF->Data[1] = 0;    // 保存変数
    57 :	        pCF->Data[2] = 0;    // 保存変数
    58 :	        pCF->Data[3] = 0;    // 保存変数
    59 :	        pCF->ExpData->PutData(pCF->Data,ConstParams::DATA_NUM);    // データ格納
    60 :	    }
    61 :	    if(pCF->CmdFlag==CTRL_EXIT){
    62 :	        // 終了処理モード (ここは制御終了時に1度だけ呼び出される(非実時間空間なので重い処理もOK))
    63 :	        delete gpio;
    64 :	        gpio = NULL;
    65 :	    }
    66 :	}




- 116305 -

研究室の横の倉庫 - Side Warehouse of Laboratory
Copyright(C), Side Warehouse, All rights reserved.