ROBOXformatでラジコン操作をするためのサンプルプログラム
Dependencies: ROBOXformat beep_sound mbed
main.cpp@0:d9129861a1f5, 2016-10-09 (annotated)
- Committer:
- natuga117
- Date:
- Sun Oct 09 00:32:08 2016 +0000
- Revision:
- 0:d9129861a1f5
publish
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
natuga117 | 0:d9129861a1f5 | 1 | #include "mbed.h" |
natuga117 | 0:d9129861a1f5 | 2 | #include "beep_sound.h" |
natuga117 | 0:d9129861a1f5 | 3 | #include "ROBOXformat.h" |
natuga117 | 0:d9129861a1f5 | 4 | ROBOXformat ir(A3,0.4);//SOCKET_E2に赤外線受信モジュールをセット |
natuga117 | 0:d9129861a1f5 | 5 | beep_sound sp(D10);//SOCKET_E3にスピーカーモジュールをセット |
natuga117 | 0:d9129861a1f5 | 6 | //スタートアップボード用のスイッチやLED類 |
natuga117 | 0:d9129861a1f5 | 7 | DigitalIn sw1(D4); |
natuga117 | 0:d9129861a1f5 | 8 | DigitalIn sw2(D5); |
natuga117 | 0:d9129861a1f5 | 9 | DigitalOut led1 (A1); |
natuga117 | 0:d9129861a1f5 | 10 | DigitalOut led2 (A0); |
natuga117 | 0:d9129861a1f5 | 11 | //モーター用の設定(ギア比は114.7:1を想定) |
natuga117 | 0:d9129861a1f5 | 12 | PwmOut Ain1(PA_11); |
natuga117 | 0:d9129861a1f5 | 13 | PwmOut Ain2(PC_6); |
natuga117 | 0:d9129861a1f5 | 14 | PwmOut Bin1(PC_8); |
natuga117 | 0:d9129861a1f5 | 15 | PwmOut Bin2(PC_9); |
natuga117 | 0:d9129861a1f5 | 16 | int ir_data;//赤外線データ格納用の変数 |
natuga117 | 0:d9129861a1f5 | 17 | void move(double mA,double mB); |
natuga117 | 0:d9129861a1f5 | 18 | void brake(void); |
natuga117 | 0:d9129861a1f5 | 19 | int main() |
natuga117 | 0:d9129861a1f5 | 20 | { |
natuga117 | 0:d9129861a1f5 | 21 | while(1) {//無限ループ |
natuga117 | 0:d9129861a1f5 | 22 | ir_data=ir.getData();//現在受信中の赤外線データを取得 |
natuga117 | 0:d9129861a1f5 | 23 | /*受け取る赤外線データ |
natuga117 | 0:d9129861a1f5 | 24 | <方向キー(pad左側4つのボタン)> |
natuga117 | 0:d9129861a1f5 | 25 | 上ボタン=1 |
natuga117 | 0:d9129861a1f5 | 26 | 右ボタン=2 |
natuga117 | 0:d9129861a1f5 | 27 | 下ボタン=4 |
natuga117 | 0:d9129861a1f5 | 28 | 左ボタン=8 |
natuga117 | 0:d9129861a1f5 | 29 | <特殊キー(pad右側4つのボタン)> |
natuga117 | 0:d9129861a1f5 | 30 | Xボタン=16(上) |
natuga117 | 0:d9129861a1f5 | 31 | Aボタン=32(右) |
natuga117 | 0:d9129861a1f5 | 32 | Bボタン=64(下) |
natuga117 | 0:d9129861a1f5 | 33 | Yボタン=128(左) |
natuga117 | 0:d9129861a1f5 | 34 | この中で押すボタンの数を合計したのが受信しているボタンです |
natuga117 | 0:d9129861a1f5 | 35 | rev2(緑のコントローラー)だと2個まで、rev3(黒のコントローラー)だと全キーの同時入力まで対応しています。 |
natuga117 | 0:d9129861a1f5 | 36 | 例)上ボタンとAボタンの同時押し→1+32=33 |
natuga117 | 0:d9129861a1f5 | 37 | */ |
natuga117 | 0:d9129861a1f5 | 38 | if(ir_data==8) { |
natuga117 | 0:d9129861a1f5 | 39 | move(-1,1); |
natuga117 | 0:d9129861a1f5 | 40 | } else if(ir_data==2) { |
natuga117 | 0:d9129861a1f5 | 41 | move(1,-1); |
natuga117 | 0:d9129861a1f5 | 42 | } else if(ir_data==64) { |
natuga117 | 0:d9129861a1f5 | 43 | move(-1,-1); |
natuga117 | 0:d9129861a1f5 | 44 | } else if(ir_data==128) { |
natuga117 | 0:d9129861a1f5 | 45 | move(1,1); |
natuga117 | 0:d9129861a1f5 | 46 | } else if(ir_data==8+128) { |
natuga117 | 0:d9129861a1f5 | 47 | move(0.5,1); |
natuga117 | 0:d9129861a1f5 | 48 | } else if(ir_data==2+128) { |
natuga117 | 0:d9129861a1f5 | 49 | move(1,0.5); |
natuga117 | 0:d9129861a1f5 | 50 | } else if(ir_data==8+64) { |
natuga117 | 0:d9129861a1f5 | 51 | move(-0.5,-1); |
natuga117 | 0:d9129861a1f5 | 52 | } else if(ir_data==2+64) { |
natuga117 | 0:d9129861a1f5 | 53 | move(-1,-0.5); |
natuga117 | 0:d9129861a1f5 | 54 | } else { |
natuga117 | 0:d9129861a1f5 | 55 | move(0,0); |
natuga117 | 0:d9129861a1f5 | 56 | } |
natuga117 | 0:d9129861a1f5 | 57 | if(ir_data==32) { |
natuga117 | 0:d9129861a1f5 | 58 | sp.beep_wrong(1);//クラクション |
natuga117 | 0:d9129861a1f5 | 59 | wait(1); |
natuga117 | 0:d9129861a1f5 | 60 | } else if(ir_data==16) { |
natuga117 | 0:d9129861a1f5 | 61 | sp.beep_notif1(1);//発射音 |
natuga117 | 0:d9129861a1f5 | 62 | ir.send_code(PA_15,255,true);//攻撃光線発射!(PA_15から) |
natuga117 | 0:d9129861a1f5 | 63 | wait(1); |
natuga117 | 0:d9129861a1f5 | 64 | } |
natuga117 | 0:d9129861a1f5 | 65 | |
natuga117 | 0:d9129861a1f5 | 66 | } |
natuga117 | 0:d9129861a1f5 | 67 | } |
natuga117 | 0:d9129861a1f5 | 68 | void move(double mA,double mB) |
natuga117 | 0:d9129861a1f5 | 69 | { |
natuga117 | 0:d9129861a1f5 | 70 | if(mA<0) { |
natuga117 | 0:d9129861a1f5 | 71 | Ain2=-mA; |
natuga117 | 0:d9129861a1f5 | 72 | Ain1=0; |
natuga117 | 0:d9129861a1f5 | 73 | } else { |
natuga117 | 0:d9129861a1f5 | 74 | Ain2=0; |
natuga117 | 0:d9129861a1f5 | 75 | Ain1=mA; |
natuga117 | 0:d9129861a1f5 | 76 | } |
natuga117 | 0:d9129861a1f5 | 77 | if(mB<0) { |
natuga117 | 0:d9129861a1f5 | 78 | Bin2=-mB; |
natuga117 | 0:d9129861a1f5 | 79 | Bin1=0; |
natuga117 | 0:d9129861a1f5 | 80 | } else { |
natuga117 | 0:d9129861a1f5 | 81 | Bin2=0; |
natuga117 | 0:d9129861a1f5 | 82 | Bin1=mB; |
natuga117 | 0:d9129861a1f5 | 83 | } |
natuga117 | 0:d9129861a1f5 | 84 | } |
natuga117 | 0:d9129861a1f5 | 85 | void brake(void) |
natuga117 | 0:d9129861a1f5 | 86 | { |
natuga117 | 0:d9129861a1f5 | 87 | Ain1=1; |
natuga117 | 0:d9129861a1f5 | 88 | Ain2=1; |
natuga117 | 0:d9129861a1f5 | 89 | Bin1=1; |
natuga117 | 0:d9129861a1f5 | 90 | Bin2=1; |
natuga117 | 0:d9129861a1f5 | 91 | } |