受け取りです.質問・アドバイスがあればどうぞ.
Dependencies: MultiSerial mbed
main.cpp@0:f38700ce12ea, 2014-06-28 (annotated)
- Committer:
- lilac0112_1
- Date:
- Sat Jun 28 04:31:44 2014 +0000
- Revision:
- 0:f38700ce12ea
- Child:
- 1:b43b0cbff722
Who changed what in which revision?
User | Revision | Line number | New 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 | } |