コレは何?/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 : }
研究室の横の倉庫 - Side Warehouse of Laboratory
Copyright(C), Side Warehouse, All rights reserved.