腕のプログラムです.

Dependencies:   mbed TextLCD MultiSerial Pswitch

Revision:
5:c2a278842131
Parent:
4:1102ab499430
Child:
6:606507fc8852
--- a/main.cpp	Tue Sep 30 12:28:33 2014 +0000
+++ b/main.cpp	Fri Oct 03 10:33:37 2014 +0000
@@ -8,18 +8,18 @@
 #define CHECK DATA_NUM-1//number of last data
 #define TIME_LIMIT 1.0//腕が閉まっても動けるのはTIME_LIMIT[s]まで
 #define ARM_REV 1.0//腕のPWM
-#define TURN_REV 0.0//回転の初期PWM
-#define TURN_RATIO 1000000000//なるべく大きい数
+#define TURN_REV 0.25//回転の初期PWM
+#define TURN_RATIO 100//1000000000//なるべく大きい数
 #define TURN_RATE 1//加速度の変更...1, 2, 4, 8, 16...
 #define TURN_REV_LIMIT 0.5//PWMの最大数値
-#define TURN_ACCELERATION 0.015625//なるべく小さい数
-#define TURN_SLOPE TURN_RATE*0.015625//なるべく小さい数1/2, 4, 8,...256
+#define TURN_ACCELERATION 0.1//0.015625//なるべく小さい数
+#define TURN_SLOPE TURN_RATE*0.1//0.015625//なるべく小さい数1/2, 4, 8,...256
 
 #define KEYCODE 0xAA
 
 uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
 uint8_t count=0;
-uint8_t TURN, IO,SIG;
+uint8_t TURN=0, IO=0,SIG=0;
 uint8_t data[DATA_NUM];
 
 enum Logic{OFF=0, ON};//殆どはモーターのON,OFFに使う
@@ -34,12 +34,11 @@
     BusIn mt(p19, p20, p17, p18);//Switch
 */
 
-MultiSerial leg_mbed(p13,p14,read);
 
-//BusIn mt(p5, p6, p7, p8);
+BusIn mt(p7, p8, p9, p10);
 //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 OneEighty[2]={p18, p19};//R, L
+InterruptIn HandSW[3]={p15, p16, p17};//p14, p15, p16//R, L, C
 DigitalIn TurnSW[2]={p11, p12};//
 PwmOut HandSpeed[2]={p23, p24};
 PwmOut TurnSpeed(p22);//p22
@@ -49,9 +48,11 @@
 //ex)Turn[CW]=ON;
 Serial pc(USBTX, USBRX);
 Ticker flick;
+Ticker Save;
 Ticker Accelerator;
 Timeout Touch;//腕で掴むときの安全対策
 
+void SW_saving(void);
 void Acceleration(void);
 void StopCatching(void);//literally
 void StopLeaving(void);//literally
@@ -68,7 +69,9 @@
 
 int main(void) {
     
-    //mt.mode(PullUp);
+    wait(0.5);
+    
+    MultiSerial leg_mbed(p13,p14,read);
     
     SetUp();
     
@@ -76,7 +79,7 @@
         
         leg_mbed.read_data(data,KEYCODE);
         
-        INdata[0] = data[0];// = ~mt;
+        INdata[0] = data[0] | ~mt;
         
         if(GetBit(INdata[0], 2)==OFF) StopLeaving();//停止
         
@@ -110,7 +113,7 @@
         
         //上体回転
         
-        IO = GetBit(INdata[0], 3)+GetBit(INdata[0], 4);
+        //IO = GetBit(INdata[0], 3)+GetBit(INdata[0], 4);
         
         //if(GetBit(INdata[0], 3)==OFF) Turn[CW] = OFF;//停止
         //if(GetBit(INdata[0], 4)==OFF) Turn[CCW] = OFF;//停止
@@ -132,6 +135,27 @@
             Turn[CW] = OFF;
             Turn[CCW] = OFF;
         }
+        
+        //Acceleration();
+        
+        //float i;
+
+        /*SIG = LinkBit(0, 0, 0, 0, 0, 0, GetBit(INdata[0], 3), GetBit(INdata[0], 4)); 
+        IO = GetBit(INdata[0], 3)+GetBit(INdata[0], 4);
+        
+        if((IO==1)&&(0<=TurnSpeed)&&(TurnSpeed<TURN_REV_LIMIT)&&(TURN==SIG)){
+            
+            TurnSpeed = TurnSpeed + TURN_SLOPE;
+            wait(TURN_ACCELERATION);
+        }
+        if(((IO==0)||(IO==2)||(TURN!=SIG))&&(0<TurnSpeed)&&(TurnSpeed<=TURN_REV_LIMIT)){
+            
+            TurnSpeed = TurnSpeed - TURN_SLOPE;
+            wait(TURN_ACCELERATION);
+        }*/
+        //i = TurnSpeed;
+        //pc.printf("%f, %d\n", i, IO);
+        
         if(!TurnSW[N]) Turn[CW]=OFF;//リミットスイッチによる停止
         if(!TurnSW[E]) Turn[CCW]=OFF;
         
@@ -139,6 +163,10 @@
     }
 }
 
+void SW_saving(void){
+    IO = GetBit(INdata[0], 3)+GetBit(INdata[0], 4);
+    SIG = LinkBit(0, 0, 0, 0, 0, 0, GetBit(INdata[0], 3), GetBit(INdata[0], 4));
+}
 void Acceleration(void){
     
     float i;
@@ -149,12 +177,12 @@
     if((IO==1)&&(((unsigned long)(TurnSpeed*TURN_RATIO)==0)||(0<(unsigned long)(TurnSpeed*TURN_RATIO)))&&((unsigned long)(TurnSpeed*TURN_RATIO)<(unsigned long)(TURN_REV_LIMIT*TURN_RATIO))&&(TURN==SIG)){
         
         TurnSpeed = TurnSpeed + TURN_SLOPE;
-        
+        wait(TURN_ACCELERATION);
     }
     if(((IO==0)||(IO==2)||(TURN!=SIG))&&(0<(unsigned long)(TurnSpeed*TURN_RATIO))&&((unsigned long)(TurnSpeed*TURN_RATIO)<=(unsigned long)(TURN_REV_LIMIT*TURN_RATIO))){
         
         TurnSpeed = TurnSpeed - TURN_SLOPE;
-
+        wait(TURN_ACCELERATION);
     }
     i = TurnSpeed;
     pc.printf("%f, %d\n", i, IO);
@@ -202,6 +230,7 @@
     if((!OneEighty[R])&&(!OneEighty[L])){
         Touch.attach(StopCatching, TIME_LIMIT);//TIME_LIMIT[s]で停止
         StartCatching();
+        LED=15;
     }
     
 }
@@ -217,13 +246,14 @@
 }
 void SetUp(void){//literally
     
-    //mt.mode(PullUp);
+    mt.mode(PullUp);
     
     HandSpeed[R] = HandSpeed[L] = ARM_REV;
     TurnSpeed = TURN_REV;
     
     //flick.attach(illumination, .5);
-    Accelerator.attach(Acceleration, TURN_ACCELERATION);
+    //Accelerator.attach(Acceleration, TURN_ACCELERATION);
+    //Save.attach(SW_saving, 0.015625);
     
     HandSW[R].mode(PullUp);
     HandSW[L].mode(PullUp);
@@ -240,5 +270,4 @@
     TurnSW[N].mode(PullUp);
     TurnSW[E].mode(PullUp);
     
-    wait(0.5);
 }
\ No newline at end of file