arduino + SBDBT!


ファミタンクの無線のSBDBTへの切り替えをやっとやりました。
プログラムのバグを友人に教えてもらったりしつつ、動くところまで出来ました。
これで、次回のロボサバはバーチャロン用ツインスティックでアサルト的に操作して遊べる予定です。
さらにハードウェアにオムニホイールを導入すれば、サイバースレッド的な操作感も実現できます。
スケッチのベースは以前miconoさんに教えてもらったものです。(ありがとうございます!)




備忘メモとして、サンプルプログラムを上げておきます。
Wiiコントローラーの入力に応じて、arduinoのシリアルモニタに入力された数値と押されたキーを出力するものです。
(ファミタンク仕様のため、右ボタンをレバーとして表記してしまっていますがすみません。)
初歩的なプログラムですが、私のような電子工作の初心者にとってかなり重要なもので、これさえあればarduinoで作った電子工作ならなんでもかんでも即座にwiiリモコンで操作できるようになります。
ラジコンやロボットはもちろん、クアッドコプターに搭載するマジックハンドとか、LEDのイルミネーションを遠隔操作したりとか、誰でも思いつくような素朴なアイデアを、かなりのハードルの低さで実現できてしまいます♪(人として悪い事につかってはなりません。)

個人的には、レトロゲームをフィジカル化したような、動く卓上ゲームをいろいろ作りたいと思っています。




SBDBTはwii用ファームの「ソース Ver.130722」を使います。



【SBDBTとarduinoの接続】
SBDBT2番ピン:arduinoの3.3V
SBDBT3番ピン:arduinoのGND
SBDBT7番ピン:arduinoのシリアル信号入力(今回の例ではデジタル12番ピン)



【SBDBTの設定】
global.h 内の設定

#define PIN_CODE_DEFAULT "0000"
#define BOARD_SBDBT 1
#define BOARD_SBXBT 0

// Define the baud rate constants UART1
#define BAUDRATE1 9600
#define BRG_DIV1 4
#define BRGH1 1

// Define Hardware Flow Control UART1 (0:off 1:on)
#define UART1_HW_FLOW 0
#define UART1_TX_POLARITY 0 //(※反転なしなので注意。)
#define UART1_RX_POLARITY 0

#define WII_REMOTE_CONNECTION_SYNC 0

#define MODE_NO_INQUIRY 0

#define WII_REMOTE_REPORT_MODE 0x30
#define WII_REMOTE_REPORT_MODE_EXT 0x35

#define SERIAL_TRANSFER 2

#define SEND_ON_DIFFERENT_DATA 1
#define UART1_MINIMUM_INTERVAL 0

#define WII_REMOTE_HORIZONTAL 1
#define WII_REMOTE_ACC_SCALE 6
#define WII_REMOTE_ACC_DEADZONE 25
#define WII_CC_ANALOG_DEADZONE 25
#define NEUTRAL_DATA_SUPPRESS 1
#define NEUTRAL_ADDITIONAL_PACKETS 0


// Define the baud rate constants UART2 (Debug)
#define BAUDRATE2 115200
#define BRG_DIV2 4
#define BRGH2 1

// Define LED1 communication indicator on time(ms)
#define LED1_ON_COUNT 10




【arduinoのスケッチ】

//-------------------------------------------------------------

#include

#define MYRX 12 //デジタル12番ピンはソフトウェアシリアルRX
#define MYTX 11 //デジタル11番ピンはソフトウェアシリアルTX
SoftwareSerial mySerial(MYRX, MYTX);

unsigned char c[8];
unsigned long chksum;

void setup(){
mySerial.begin(9600);//SBDBTとArduinoは2400bps
Serial.begin(19200);//シリアルモニター表示
c[0]=0x80;//SBDBTからのシリアル信号の1個目は固定。
}

void loop(){
//まずは無線からシリアルを読み込む。c[1]とc[2]にキー入力が格納される。
int i;
if (mySerial.available() >= 8) { //8byte以上あるかチェック
if (mySerial.read() == 0x80){ //1byte読み込んで0x80のスタートビットかチェック
Serial.print(c[0],HEX);//16進数で数値を表示。
Serial.print(",");//コンマで区切る。
for (chksum=c[0],i=1;i<8;i++){//スタートビットは読み込み済みなので、次の7個のデータを読み込む。
c[i]= mySerial.read();
if(i<7) chksum+=c[i];
Serial.print(c[i],HEX);//16進数で数値を表示。
Serial.print(",");//}//コンマで区切る。
}
if(c[7]==(chksum & 0x7F)){//ボタン部分のみのチェックサムを簡易計算してみる。
Serial.println("check sum OK !");//チェックサムOKを表示。
}
else {
Serial.println("check sum * * ERROR * *");//ダメならエラーを表示。
}

//ここから、キー入力に応じて、メッセージを出す。
if(c[1] == 0x00 ){//何も押されていなければ静止
if(c[2] == 0x00 ){//何も押されていなければ静止
Serial.println("* STOP *");
}
}

if((c[1] & 0x10) == 0x10 ){//右トリガ:ショット(R2ボタン)
Serial.println("FIRE!!");
}
if((c[1] & 0x08 ) == 0x08 ){//右ボタン:照準センタリング(R1ボタン)
Serial.println("Centering");
}
if((c[1] & 0x02 ) == 0x02 ){//左ボタン:照準UP(L1ボタン)
Serial.println("Target_UP");
}
if((c[1] & 0x04 ) == 0x04 ){//左トリガ;照準DOWN(L2ボタン)
Serial.println("Target_DOWN");
}
if((c[2] & 0x01 ) == 0x01 ){//左レバー上(十字↓)
Serial.println("LEFTLEVER_UP");
}
if((c[2] & 0x02 ) == 0x02 ){//左レバー下(十字↑)
Serial.println("LEFTLEVER_DOWN");
}
if((c[2] & 0x10 ) == 0x10 ){//右レバー上(Xボタン)
Serial.println("RIGHTLEVER_UP");
}
if((c[2] & 0x20 ) == 0x20 ){//右レバー下(Bボタン)
Serial.println("RIGHTLEVER_DOWN");
}
}
}
}

//-------------------------------------------------------------
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

コメントの投稿

非公開コメント

No title

先日はありがとうございました。基盤だけでもすごいのに、コンパネまでとは恐れ入りました!すごいですね。 ちなみにメトロクロスは、クラッカージャンプのタイミングがわからず真上に飛ばされ、何度やっても上手くいきませんでした。いつかリベンジしたいです。

懐かしいわ

アサルトは基板もコンパネも持ってましたw あれとメトロクロスはハマりすぎてた…
プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク