概要
PSoC3でPS2コントローラを使用する方法を説明します。
設定
必要なソースコードの入手
- ソースコードの入手方法は2つあります。
- ひとつはロボ部サーバから入手する方法です。
/プログラム/Library/PS2_Controller/にあるPS2_Controller.cとPS2_Controller.hをプロジェクトのフォルダにある、プロジェクト名.cydsnの中にコピーしてください。 - もうひとつはgithubから入手する方法です。ロボット倶楽部のgithubにPSoC3_Libraryというリポジトリがあるのでこれをローカルにクローンしてください。クローンができたら、PSoC3_Library/PS2_Controllerの下にあるふたつのファイルをプロジェクト名.cydsnの中にコピーしてください。
目的のプロジェクトにソースを追加
次に入手したソースコードをプロジェクトに追加します。
- 目的のプロジェクトを開いてください。
- デフォルトでは左にあるWorkspace ExplorerにHeader Filesという項目があります。そこで右クリック、Add、Existing Item...を選択します。
- 先にコピーしたPS2_Controller.hを選択して開くをクリックします。
- Source Filesからも同じようにしてPS2_Controller.cを追加します。
- 成功すればWorkspace Explorerにこのように表示されます。
必要モジュールの追加、設定
次にPS2コントローラを使うために必要なモジュールを設定します。
- Workspace ExplorerからTopDesign.cyschを開いてください。
- 空のページを追加します。
- 追加したページの名前をPS2に変更します。ここにPS2コントローラに関するモジュールを配置します。
- まずUARTモジュールを追加します。Component CatalogでUARTを検索し、でてきたUARTモジュールをTopDesignにドラッグアンドドロップしてください。
- UARTモジュールを設定します。追加したUARTモジュールをダブルクリックするとConfigure'UART'が表示されます。これを以下のように設定してください。
設定が終わったらOKボタンをクリックして設定を有効にしてください。 - TX_1がUARTモジュールから切り離されるのでTX_1を削除します。
- RX_1に接続されているcy_pinsモジュールの名前を'PS2_IN'に変更してください。
- PS2_INのピン設定を行ってください。
- logic lowを追加します。Component Catalogでlogic lowと検索し、でてきたLogic Lowモジュールを先に追加したUARTモジュールのresetに接続するように配置してください。
- Logic Lowモジュールの名前を'ZeroTerminal_3'に変更してください。
- Interruptモジュールを追加します。Component Catalogでisrと検索し、でてきた'Interrupt'モジュールを先に追加したUARTモジュールのrx_interruptに接続するように配置してください。
- 追加したInterruptモジュールの名前を'ISR_PS2'に変更してください。
使い方
構造体変数宣言
- PS2コントローラを使用するために必要な構造体PS2Controllerの変数を宣言します。
PS2Controller psData;
初期化処理
- 初期化のため下のコードを書きます。
PS2_Start();
値の取得方法
- PS2コントローラの最新の状態を取得するためにはPS2_Controller_get関数を使用します。PS2_Controller_get関数は以下のように定義されています。
PS2Controller PS2_Controller_get(void);
- 下のコードを書いたとき、psDataにはPS2コントローラの最新の状態が保存されます。
PS2Controller psData; psData = PS2_Controller_get();
- ボタンが押されているかどうか確認するためにはPS2_Controller_getで取得した値を見ます。
例えば○ボタンが押されているか確認するためには上のコードに加え下のようなコードを書きます。
PS2Controller構造体の詳細についてはPS2_Controller.hを確認してください。if(psData.CIRCLE){ //○ボタンが押されている場合の処理 }else{ //○ボタンが押されていない場合の処理 }
#include #include int main() { PS2Controller psData; PS2_Start(); while(1) { psData = PS2_Controller_get(); if(psData.CIRCLE){ //○ボタンが押されているときの処理 }else{ //○ボタンが押されていないときの処理 } } }