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

Dependencies:   MultiSerial mbed

main.cpp

Committer:
lilac0112_1
Date:
2014-06-28
Revision:
0:f38700ce12ea
Child:
1:b43b0cbff722

File content as of revision 0:f38700ce12ea:

#include "mbed.h"
#include "main.h"//ピン位置,main関数までの初期動作の詳細,変数,関数等

extern bool GetBit(void);
extern DigitalOut LED[4];
//オムニホイール関連
extern DigitalOut Omni[4][2];
extern PwmOut OmniSpeed[4];
extern void pause(void);
extern void go(void);
extern void back(void);
extern void sidleleft(void);
extern void sidleright(void);
extern void turnleft(void);
extern void turnright(void);
//上体回転関連
extern DigitalOut Turn[2];
extern DigitalIn TurnSW;
extern PwmOut TurnSpeed;
//パワーウィンドウ(腕)関連
extern bool Pushed[2];
extern DigitalOut Hand[2][2];
extern InterruptIn HandSW[3];
extern Timeout Touch;

extern void StopCatching(void);
extern void StopLeaving(void);
extern void StartCatching(void);
extern void StartLeaving(void);
extern void RightCatch(void);
extern void LeftCatch(void);
extern void CenterCatch(void);

//通信関連
extern Serial pc;
extern Serial Xbee;//p13, p14
extern volatile uint8_t INdata[DATA_NUM], EXdata[DATA_NUM];
extern void TX(void);
extern void RX(void);
int main(void) {
    //簡単そうなコードの説明は省く
    int i;
    BusIn mt(p21, p22, p23, p24, p25, p26);//調整用スイッチ
    mt.mode(PullUp);
    //オムニホイール関連
    for(i=0; i<4; i++) OmniSpeed[i] = OmniRev;//オムニホイールのPWM
    //上体回転関連
    TurnSpeed = TurnRev;//上体回転のPWM
    TurnSW.mode(PullUp);
    //パワーウィンドウ(腕)関連
    HandSW[R].mode(PullUp);
    HandSW[L].mode(PullUp);
    HandSW[C].mode(PullUp);
    HandSW[R].rise(RightCatch);//立ち上がり
    HandSW[L].rise(LeftCatch);//立ち上がり
    HandSW[C].rise(CenterCatch);//立ち上がり
    //通信関連
    Xbee.attach(&RX, Serial::RxIrq);
    Xbee.attach(&TX, Serial::TxIrq);
    Xbee.putc(1);//送信開始
    i = Xbee.getc();//受信開始
    while(1) {
        //腕のプログラム
        INdata[1]= ~mt;//調整用スイッチ
        StopLeaving();//停止
        if((GetBit(INdata[1], 1)+GetBit(INdata[1], 2))==1){//同時押し防止
            if(GetBit(INdata[1], 1)==true) CenterCatch();//中央のリミットスイッチがうまく動作しなかった場合の保険
            if(GetBit(INdata[1], 2)==true){//腕を広げる動作はマニュアル操作
                StopCatching();//停止
                Touch.detach();//ワンショットタイマー停止
                Hand[R][Open] = Hand[L][Open] = GetBit(INdata[1], 2);
            }
        }
        //オムニホイール
        INdata[2] = ~mt;//調整用スイッチ
        pause();//停止
        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){//同時押し防止     
            if(GetBit(INdata[2], 1)) go();//前進
            if(GetBit(INdata[2], 2)) back();//後進
            if(GetBit(INdata[2], 3)) sidleleft();//左移動
            if(GetBit(INdata[2], 4)) sidleright();//右移動
            if(GetBit(INdata[2], 5)) turnleft();//左旋回
            if(GetBit(INdata[2], 6)) turnright();//右旋回
        }
        //上体回転
        INdata[3] = ~mt;//調整用スイッチ
        Turn[CW] = Turn[CCW] = OFF;//停止
        if((GetBit(INdata[3], 1)+GetBit(INdata[3], 2))==1){//同時押し防止
            if(GetBit(INdata[3], 1)&&(TurnSW)){
                Turn[CCW] = ON;//押されていて,かつリミットスイッチが押されていなかったら左回転
            }
            if(GetBit(INdata[3], 2)){
                Turn[CW] = ON;//押されたら右回転
            }
        }
    }
}