2013年10月30日水曜日

Raspberry Pi でユニバーサルモジュールを使ってみる

Raspberry Pi でユニバーサルモジュールを使用してみます。
その際のサンプルプログラムについて説明します。
C言語はwiringpiを使います。




//各種ファイルをインクルード
#include "common.h"
#include "MCUGear.h"
#include "MCUGearBase.h"
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <stdio.h>

//使う関数の宣言
void IOUni2M(MCUGear *mcugear);


int main(void){

int pin = 0; //IO 0//LED
int sw = 1; //IO 1//スイッチ

int sw_data = 0;//スイッチの状態を一時的に格納する変数(今回は使用しなくても良いです)

if(wiringPiSetup() == -1)//wiringpiを設定
return 1;

pinMode(pin, OUTPUT);//IO0を出力に設定
pinMode(sw, INPUT);//IO1を入力に設定

initBase(); //initialize Baseboard   //ベースボードの初期化
 
MCUGear Uni2M = MCUGear(N_VDD_VDD_VDD, 2); //モジュールの任意名称をUni2Mとして、基板の裏面に設定したアドレス、モジュールの端子を2つ使うこととする。

  IOUni2M(&Uni2M);//GPIOとモジュール端子の割り当て方を定義


while(1){//以下、ループさせます
 
printf("Alive\n");//動作中かをターミナルに表示している
//Universal module
digitalWrite(pin,1); //動的に再配線する前に念のため初期化
Uni2M.connectModule();     //動的に再配線する

if(digitalRead(sw)==1){//スイッチの状態でLEDのONOFFをします。
digitalWrite(pin,1); //LED off
sw_data = 1;
}else{
digitalWrite(pin,0); //LED on
sw_data = 0;
}
delay(100); //set your favorite time//今回は無くても確認できます
Uni2M.disconnectModule();   //再配線を切断します
}
return 0;
}



void IOUni2M(MCUGear *mcugear){

    unsigned char fio[12];
    // detect
    mcugear->detect_module(fio);     //モジュールの取り付けられた位置を把握します
    delay(100);
    printf("fio[0] = %d",fio[0]);
    mcugear->savePinSetting(0, IO_0, IO_REG_OUT_DIR, fio[0]);  //output//モジュールの0番端子にGPIOのIO0番を割り当て、GPIOから見て出力端子としています。
   mcugear->savePinSetting(1, IO_1, IO_REG_IN_DIR, fio[1]); //input
#ifdef BOOST_MODE
    mcugear->makeCircuit();//モジュールの切り替え動作を短縮し高速化する関数ですが、追々ほど説明します。
#endif

}












0 件のコメント:

コメントを投稿