Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed TextLCD MultiSerial Pswitch
Diff: main.cpp
- Revision:
- 2:eb1c123c9140
- Parent:
- 1:006debaed874
- Child:
- 3:a1489a94c436
--- a/main.cpp Mon Jul 14 09:18:29 2014 +0000
+++ b/main.cpp Wed Sep 03 05:22:12 2014 +0000
@@ -6,7 +6,8 @@
#define KEY 0//number of first data
#define CHECK DATA_NUM-1//number of last data
#define TIME_LIMIT 1.0//腕が閉まっても動けるのはTIME_LIMIT[s]まで
-#define ARM_REV .25
+#define ARM_REV 1.0
+#define TURN_REV 0.5
volatile uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
volatile uint8_t count=0;
@@ -14,17 +15,25 @@
enum Logic{OFF=0, ON};//殆どはモーターのON,OFFに使う
enum Arm{R=0, L, C};//右腕と左腕
enum Clip{Open=0, Close};//開ける動作と閉める動作
+enum Revolution{CW=0, CCW};//正回転,逆回転(上体回転)
+enum Compass{N=0, E, W, S};//マシンの回転
-bool GetBit(uint8_t n, uint8_t bit){//n=8[bit]data, bit = 1-8(8bitのデータから指定bitの数値を読み取る)
+bool GetBit(uint8_t n, uint8_t bit){//n=8[bit]data, bit = 1-8(8bitのデータから指定bitの数値を読み取る)-
return (n>>(bit-1))%2;
}
BusOut LED(LED1, LED2, LED3, LED4);//確認用
-BusIn mt(p5, p6, p7, p8, p9, p10);//Switch
-InterruptIn HandSW[3]={p15, p16, p17};//p14, p15, p16//R, L, C
-PwmOut HandSpeed[2]={p25, p26};
-DigitalOut Hand[2][2]={{p30, p29}, {p28, p27}};//{p17, p18}, {p19, p20}
+BusIn mt(p19, p20, p17, p18);//Switch
+//DigitalIn Ninety[2]={p5, p6};//R, L
+DigitalIn OneEighty[2]={p5, p6};//R, L
+InterruptIn HandSW[3]={p7, p8, p9};//p14, p15, p16//R, L, C
+DigitalIn TurnSW[2]={p11, p12};//
+PwmOut HandSpeed[2]={p23, p24};
+PwmOut TurnSpeed(p22);//p22
+DigitalOut Hand[2][2]={{p28, p27}, {p26, p25}};//{p17, p18}, {p19, p20}
//ex)Hand[R][Close]=ON;
+DigitalOut Turn[2]={p29, p30};//p29, p30
+//ex)Turn[CW]=ON;
Serial pc(USBTX, USBRX);
Ticker flick;
Timeout Touch;//腕で掴むときの安全対策
@@ -54,7 +63,8 @@
if(GetBit(INdata[1], 2)==true){//腕を広げる動作はマニュアル操作
StopCatching();//停止
Touch.detach();//ワンショットタイマー停止
- Hand[R][Open] = Hand[L][Open] = GetBit(INdata[1], 2);
+ Hand[R][Open] = GetBit(INdata[1], 2)&&OneEighty[R];
+ Hand[L][Open] = GetBit(INdata[1], 2)&&OneEighty[L];
}
}
@@ -63,6 +73,29 @@
Touch.detach();//ワンショットタイマー停止
}
+ if(!OneEighty[R]) Hand[R][Open]=OFF;
+ if(!OneEighty[L]) Hand[L][Open]=OFF;
+ //if(!Ninety[R]) Hand[R][Close]=OFF;
+ //if(!Ninety[L]) Hand[L][Close]=OFF;
+
+ //if((!Ninety[R])&&(!Ninety[L])){//どちらも押されたら停止
+ // StopCatching();//停止
+ // Touch.detach();//ワンショットタイマー停止
+ //}
+
+ LED = ((0x01 * !HandSW[R]) | (0x02 * !HandSW[L]) | (0x04 * !HandSW[C]) | (0x08 * ((!OneEighty[R])&&(!OneEighty[L])) ));
+
+ //上体回転
+
+ if(GetBit(INdata[1], 3)==OFF) Turn[CW] = OFF;//停止
+ if(GetBit(INdata[1], 4)==OFF) Turn[CCW] = OFF;//停止
+
+ if((GetBit(INdata[1], 3)+GetBit(INdata[1], 4))==1){//同時押し防止
+
+ Turn[CW] = GetBit(INdata[1], 3)&&TurnSW[N];//押されていて,かつリミットスイッチが押されていなかったら右回転
+ Turn[CCW] = GetBit(INdata[1], 4)&&TurnSW[E];//押されていて,かつリミットスイッチが押されていなかったら左回転
+
+ }
}
}
@@ -72,11 +105,25 @@
void StopLeaving(void){//停止
Hand[R][Open]=Hand[L][Open]=OFF;
}
-void StartCatching(void){//掴む
- Hand[R][Close]=Hand[L][Close]=ON;
+void StartCatching(void){//掴む(リミットスイッチが押されてなければ)
+
+ if((!HandSW[R])&&(!HandSW[L])){
+ Hand[R][Close] = Hand[L][Close] = OFF;
+ }
+ else{
+
+ //Hand[R][Close]=Ninety[R];
+ //Hand[L][Close]=Ninety[L];
+
+ Hand[R][Close]=ON;
+ Hand[L][Close]=ON;
+
+ }
+
}
-void StartLeaving(void){//離す
- Hand[R][Open]=Hand[L][Open]=ON;
+void StartLeaving(void){//離す(リミットスイッチが押されてなければ)
+ Hand[R][Open]=OneEighty[R];
+ Hand[L][Open]=OneEighty[L];
}
void RightCatch(void){//右腕のリミットスイッチ
if((!HandSW[R])&&(!HandSW[L])){//どちらも押されたら停止
@@ -91,8 +138,12 @@
}
}
void CenterCatch(void){//中央のリミットスイッチ
- Touch.attach(StopCatching, TIME_LIMIT);//TIME_LIMIT[s]で停止
- StartCatching();
+
+ if((!OneEighty[R])&&(!OneEighty[L])){
+ Touch.attach(StopCatching, TIME_LIMIT);//TIME_LIMIT[s]で停止
+ StartCatching();
+ }
+
}
void illumination(void){//literally
count++;
@@ -103,8 +154,9 @@
mt.mode(PullUp);
HandSpeed[R] = HandSpeed[L] = ARM_REV;
+ TurnSpeed = TURN_REV;
- flick.attach(illumination, .5);
+ //flick.attach(illumination, .5);
HandSW[R].mode(PullUp);
HandSW[L].mode(PullUp);
@@ -112,4 +164,13 @@
HandSW[R].fall(RightCatch);
HandSW[L].fall(LeftCatch);
HandSW[C].fall(CenterCatch);
+
+ OneEighty[R].mode(PullUp);
+ OneEighty[L].mode(PullUp);
+ //Ninety[R].mode(PullUp);
+ //Ninety[L].mode(PullUp);
+
+ TurnSW[N].mode(PullUp);
+ TurnSW[E].mode(PullUp);
+
}
\ No newline at end of file