ROBOXformatでラジコン操作をするためのサンプルプログラム
Dependencies: ROBOXformat beep_sound mbed
main.cpp
- Committer:
- natuga117
- Date:
- 2016-10-09
- Revision:
- 0:d9129861a1f5
File content as of revision 0:d9129861a1f5:
#include "mbed.h" #include "beep_sound.h" #include "ROBOXformat.h" ROBOXformat ir(A3,0.4);//SOCKET_E2に赤外線受信モジュールをセット beep_sound sp(D10);//SOCKET_E3にスピーカーモジュールをセット //スタートアップボード用のスイッチやLED類 DigitalIn sw1(D4); DigitalIn sw2(D5); DigitalOut led1 (A1); DigitalOut led2 (A0); //モーター用の設定(ギア比は114.7:1を想定) PwmOut Ain1(PA_11); PwmOut Ain2(PC_6); PwmOut Bin1(PC_8); PwmOut Bin2(PC_9); int ir_data;//赤外線データ格納用の変数 void move(double mA,double mB); void brake(void); int main() { while(1) {//無限ループ ir_data=ir.getData();//現在受信中の赤外線データを取得 /*受け取る赤外線データ <方向キー(pad左側4つのボタン)> 上ボタン=1 右ボタン=2 下ボタン=4 左ボタン=8 <特殊キー(pad右側4つのボタン)> Xボタン=16(上) Aボタン=32(右) Bボタン=64(下) Yボタン=128(左) この中で押すボタンの数を合計したのが受信しているボタンです rev2(緑のコントローラー)だと2個まで、rev3(黒のコントローラー)だと全キーの同時入力まで対応しています。 例)上ボタンとAボタンの同時押し→1+32=33 */ if(ir_data==8) { move(-1,1); } else if(ir_data==2) { move(1,-1); } else if(ir_data==64) { move(-1,-1); } else if(ir_data==128) { move(1,1); } else if(ir_data==8+128) { move(0.5,1); } else if(ir_data==2+128) { move(1,0.5); } else if(ir_data==8+64) { move(-0.5,-1); } else if(ir_data==2+64) { move(-1,-0.5); } else { move(0,0); } if(ir_data==32) { sp.beep_wrong(1);//クラクション wait(1); } else if(ir_data==16) { sp.beep_notif1(1);//発射音 ir.send_code(PA_15,255,true);//攻撃光線発射!(PA_15から) wait(1); } } } void move(double mA,double mB) { if(mA<0) { Ain2=-mA; Ain1=0; } else { Ain2=0; Ain1=mA; } if(mB<0) { Bin2=-mB; Bin1=0; } else { Bin2=0; Bin1=mB; } } void brake(void) { Ain1=1; Ain2=1; Bin1=1; Bin2=1; }