受け取りです.質問・アドバイスがあればどうぞ.

Dependencies:   MultiSerial mbed

Committer:
lilac0112_1
Date:
Sat Jun 28 04:31:44 2014 +0000
Revision:
0:f38700ce12ea
Child:
1:b43b0cbff722

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 0:f38700ce12ea 1 #include "mbed.h"
lilac0112_1 0:f38700ce12ea 2 #include "main.h"//ピン位置,main関数までの初期動作の詳細,変数,関数等
lilac0112_1 0:f38700ce12ea 3
lilac0112_1 0:f38700ce12ea 4 extern bool GetBit(void);
lilac0112_1 0:f38700ce12ea 5 extern DigitalOut LED[4];
lilac0112_1 0:f38700ce12ea 6 //オムニホイール関連
lilac0112_1 0:f38700ce12ea 7 extern DigitalOut Omni[4][2];
lilac0112_1 0:f38700ce12ea 8 extern PwmOut OmniSpeed[4];
lilac0112_1 0:f38700ce12ea 9 extern void pause(void);
lilac0112_1 0:f38700ce12ea 10 extern void go(void);
lilac0112_1 0:f38700ce12ea 11 extern void back(void);
lilac0112_1 0:f38700ce12ea 12 extern void sidleleft(void);
lilac0112_1 0:f38700ce12ea 13 extern void sidleright(void);
lilac0112_1 0:f38700ce12ea 14 extern void turnleft(void);
lilac0112_1 0:f38700ce12ea 15 extern void turnright(void);
lilac0112_1 0:f38700ce12ea 16 //上体回転関連
lilac0112_1 0:f38700ce12ea 17 extern DigitalOut Turn[2];
lilac0112_1 0:f38700ce12ea 18 extern DigitalIn TurnSW;
lilac0112_1 0:f38700ce12ea 19 extern PwmOut TurnSpeed;
lilac0112_1 0:f38700ce12ea 20 //パワーウィンドウ(腕)関連
lilac0112_1 0:f38700ce12ea 21 extern bool Pushed[2];
lilac0112_1 0:f38700ce12ea 22 extern DigitalOut Hand[2][2];
lilac0112_1 0:f38700ce12ea 23 extern InterruptIn HandSW[3];
lilac0112_1 0:f38700ce12ea 24 extern Timeout Touch;
lilac0112_1 0:f38700ce12ea 25
lilac0112_1 0:f38700ce12ea 26 extern void StopCatching(void);
lilac0112_1 0:f38700ce12ea 27 extern void StopLeaving(void);
lilac0112_1 0:f38700ce12ea 28 extern void StartCatching(void);
lilac0112_1 0:f38700ce12ea 29 extern void StartLeaving(void);
lilac0112_1 0:f38700ce12ea 30 extern void RightCatch(void);
lilac0112_1 0:f38700ce12ea 31 extern void LeftCatch(void);
lilac0112_1 0:f38700ce12ea 32 extern void CenterCatch(void);
lilac0112_1 0:f38700ce12ea 33
lilac0112_1 0:f38700ce12ea 34 //通信関連
lilac0112_1 0:f38700ce12ea 35 extern Serial pc;
lilac0112_1 0:f38700ce12ea 36 extern Serial Xbee;//p13, p14
lilac0112_1 0:f38700ce12ea 37 extern volatile uint8_t INdata[DATA_NUM], EXdata[DATA_NUM];
lilac0112_1 0:f38700ce12ea 38 extern void TX(void);
lilac0112_1 0:f38700ce12ea 39 extern void RX(void);
lilac0112_1 0:f38700ce12ea 40 int main(void) {
lilac0112_1 0:f38700ce12ea 41 //簡単そうなコードの説明は省く
lilac0112_1 0:f38700ce12ea 42 int i;
lilac0112_1 0:f38700ce12ea 43 BusIn mt(p21, p22, p23, p24, p25, p26);//調整用スイッチ
lilac0112_1 0:f38700ce12ea 44 mt.mode(PullUp);
lilac0112_1 0:f38700ce12ea 45 //オムニホイール関連
lilac0112_1 0:f38700ce12ea 46 for(i=0; i<4; i++) OmniSpeed[i] = OmniRev;//オムニホイールのPWM
lilac0112_1 0:f38700ce12ea 47 //上体回転関連
lilac0112_1 0:f38700ce12ea 48 TurnSpeed = TurnRev;//上体回転のPWM
lilac0112_1 0:f38700ce12ea 49 TurnSW.mode(PullUp);
lilac0112_1 0:f38700ce12ea 50 //パワーウィンドウ(腕)関連
lilac0112_1 0:f38700ce12ea 51 HandSW[R].mode(PullUp);
lilac0112_1 0:f38700ce12ea 52 HandSW[L].mode(PullUp);
lilac0112_1 0:f38700ce12ea 53 HandSW[C].mode(PullUp);
lilac0112_1 0:f38700ce12ea 54 HandSW[R].rise(RightCatch);//立ち上がり
lilac0112_1 0:f38700ce12ea 55 HandSW[L].rise(LeftCatch);//立ち上がり
lilac0112_1 0:f38700ce12ea 56 HandSW[C].rise(CenterCatch);//立ち上がり
lilac0112_1 0:f38700ce12ea 57 //通信関連
lilac0112_1 0:f38700ce12ea 58 Xbee.attach(&RX, Serial::RxIrq);
lilac0112_1 0:f38700ce12ea 59 Xbee.attach(&TX, Serial::TxIrq);
lilac0112_1 0:f38700ce12ea 60 Xbee.putc(1);//送信開始
lilac0112_1 0:f38700ce12ea 61 i = Xbee.getc();//受信開始
lilac0112_1 0:f38700ce12ea 62 while(1) {
lilac0112_1 0:f38700ce12ea 63 //腕のプログラム
lilac0112_1 0:f38700ce12ea 64 INdata[1]= ~mt;//調整用スイッチ
lilac0112_1 0:f38700ce12ea 65 StopLeaving();//停止
lilac0112_1 0:f38700ce12ea 66 if((GetBit(INdata[1], 1)+GetBit(INdata[1], 2))==1){//同時押し防止
lilac0112_1 0:f38700ce12ea 67 if(GetBit(INdata[1], 1)==true) CenterCatch();//中央のリミットスイッチがうまく動作しなかった場合の保険
lilac0112_1 0:f38700ce12ea 68 if(GetBit(INdata[1], 2)==true){//腕を広げる動作はマニュアル操作
lilac0112_1 0:f38700ce12ea 69 StopCatching();//停止
lilac0112_1 0:f38700ce12ea 70 Touch.detach();//ワンショットタイマー停止
lilac0112_1 0:f38700ce12ea 71 Hand[R][Open] = Hand[L][Open] = GetBit(INdata[1], 2);
lilac0112_1 0:f38700ce12ea 72 }
lilac0112_1 0:f38700ce12ea 73 }
lilac0112_1 0:f38700ce12ea 74 //オムニホイール
lilac0112_1 0:f38700ce12ea 75 INdata[2] = ~mt;//調整用スイッチ
lilac0112_1 0:f38700ce12ea 76 pause();//停止
lilac0112_1 0:f38700ce12ea 77 if((GetBit(INdata[2], 1)+GetBit(INdata[2], 2)+GetBit(INdata[2], 3)+GetBit(INdata[2], 4)+GetBit(INdata[2], 5)+GetBit(INdata[2], 6))==1){//同時押し防止
lilac0112_1 0:f38700ce12ea 78 if(GetBit(INdata[2], 1)) go();//前進
lilac0112_1 0:f38700ce12ea 79 if(GetBit(INdata[2], 2)) back();//後進
lilac0112_1 0:f38700ce12ea 80 if(GetBit(INdata[2], 3)) sidleleft();//左移動
lilac0112_1 0:f38700ce12ea 81 if(GetBit(INdata[2], 4)) sidleright();//右移動
lilac0112_1 0:f38700ce12ea 82 if(GetBit(INdata[2], 5)) turnleft();//左旋回
lilac0112_1 0:f38700ce12ea 83 if(GetBit(INdata[2], 6)) turnright();//右旋回
lilac0112_1 0:f38700ce12ea 84 }
lilac0112_1 0:f38700ce12ea 85 //上体回転
lilac0112_1 0:f38700ce12ea 86 INdata[3] = ~mt;//調整用スイッチ
lilac0112_1 0:f38700ce12ea 87 Turn[CW] = Turn[CCW] = OFF;//停止
lilac0112_1 0:f38700ce12ea 88 if((GetBit(INdata[3], 1)+GetBit(INdata[3], 2))==1){//同時押し防止
lilac0112_1 0:f38700ce12ea 89 if(GetBit(INdata[3], 1)&&(TurnSW)){
lilac0112_1 0:f38700ce12ea 90 Turn[CCW] = ON;//押されていて,かつリミットスイッチが押されていなかったら左回転
lilac0112_1 0:f38700ce12ea 91 }
lilac0112_1 0:f38700ce12ea 92 if(GetBit(INdata[3], 2)){
lilac0112_1 0:f38700ce12ea 93 Turn[CW] = ON;//押されたら右回転
lilac0112_1 0:f38700ce12ea 94 }
lilac0112_1 0:f38700ce12ea 95 }
lilac0112_1 0:f38700ce12ea 96 }
lilac0112_1 0:f38700ce12ea 97 }