Naoyuki SAITO / Mbed 2 deprecated moter_titech_ns

Dependencies:   mbed-rtos mbed

Fork of moter_titech by y w

Revision:
7:1947b554f8e3
Parent:
3:c92e21f305d8
Child:
8:3eb58ae94a93
diff -r 209f4db62daf -r 1947b554f8e3 main.cpp
--- a/main.cpp	Tue Jun 04 16:01:32 2013 +0100
+++ b/main.cpp	Sat Dec 14 07:03:16 2013 +0000
@@ -1,21 +1,393 @@
 #include "mbed.h"
 #include "rtos.h"
+
+Serial pc(USBTX, USBRX);
+PwmOut Kata(p21);
+PwmOut Hiji(p22);
+PwmOut Te(p23);
+PwmOut Dou(p24);
+PwmOut Asi(p25);
+
+char c;
+
+int zen=0;
+int go=0;
+
+int dousa=0;
+int men=0;
+int bou=0;
+int tuk=0;
+int dou=0;
+int fei=1;
+
+float homeK = 0.028f;  //home pos  0.045-0.105
+float homeH = 0.103f;
+float homeT = 0.045f;
  
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
+ float henni(float a, float b){
+    float temp = a;
+    temp = b - a;
+    return (temp);
+}
+
+ float maxof(float a, float b, float c){
+    float A = abs(a);
+    float B = abs(b);
+    float C = abs(c);
+    float max = A;
+    if (B >= max) max = B;
+    if (C >= max) max = C;
+    return (max);
+}  
+
+ void HANTEI(void const *argument) {
+ while(true){
+        switch(c){
+        
+        default:
+        c=pc.getc();
+        break;
+        
+        case'z':
+            zen=1;
+            c=0;
+            pc.printf("zen\n");
+            break;
+            
+        case'n':
+            zen=0;
+            go=0;
+            c=0;
+            pc.printf("stop\n");
+            break;
+            
+        case'g':
+            go=1;
+            c=0;
+            pc.printf("go\n");
+            break;
+            
+        case'm':
+            if(dousa==0){
+                men=1;
+                dousa=1;
+                pc.printf("men\n");
+            }
+        c=0;
+        break;
+        
+        case'b':
+            if(dousa==0){
+                bou=1;
+                dousa=1;
+                pc.printf("bou\n");
+            }
+        c=0;
+        break;
+        
+        case't':
+            if(dousa==0){
+                tuk=1;
+                dousa=1;
+                pc.printf("tuk\n");
+            }
+        c=0;
+        break;
+        
+        case'd':
+            if(dousa==0){
+                dou=1;
+                dousa=1;
+                pc.printf("dou\n");
+            }
+        c=0;
+        break; 
+        
+        case'f':
+            if((bou==0)&&(fei==1)&&(dousa==1)){
+                fei=2;
+                pc.printf("fei\n");
+                }
+        c=0;
+        break;
+        
+    /*pc.printf("men=%d",men);
+    pc.printf("bou=%d",bou);
+    pc.printf("tuk=%d",tuk);
+    pc.printf("dou=%d",dou);
+    pc.printf("fei=%d\n",fei);
+    wait(0.5);*/
+        } 
+    }
+}
+
+ void ZENGO(void const *argument) {
+  Asi.period(0.00001); 
+ while(true){
+     if(zen==1){
+            Asi.pulsewidth(0.00000f);
+        }
+    else if(go==1){
+            Asi.pulsewidth(0.00001f);
+        }
+    else{
+        Asi.pulsewidth(0.000005f);
+        }
+    }
+}
+
+ void MEN(void const *argument) {
+ int i1=0;
+ float a1=0.055f;    //sireiti
+ float b1=0.101f;
+ float c1=0.045f;
+ float max1 = maxof(henni(homeK,a1),henni(homeH,b1),henni(homeT,c1));
+ float t1 = max1 / (0.03f / 0.17f * 0.01f); //nannbyou kakeruka 60(0.03duty)/0.17 servo /0.02s
+ 
+ 
+ int i2=0;
+ float a2=0.028f;    //sireiti
+ float b2=0.111f;
+ float c2=0.045f;
+ float max2 = maxof(henni(a1,a2),henni(b1,b2),henni(c1,c2));
+ float t2 = max2 / (0.03f / 0.17f * 0.01f); //nannbyou kakeruka 60(0.03duty)/0.17 servo /0.02s
+ 
  
-void led2_thread(void const *args) {
-    while (true) {
-        led2 = !led2;
-        Thread::wait(1000);
+ while(true){
+        if(men==1){
+        
+        switch(fei){
+        case 1: //men motion
+        i1=i1+1;
+        Kata = homeK + (a1 - homeK) / t1 * i1;
+        Hiji = homeH + (b1 - homeH) / t1 * i1;
+        Te = homeT + (c1 - homeT) / t1 * i1;
+        wait(0.022);
+        if(i1>t1){
+        fei=3;
+        }
+        break;
+        
+        case 2: //feint
+        i1=i1-1;
+        Kata = homeK + (a1 - homeK) / t1 * i1;
+        Hiji = homeH + (b1 - homeH) / t1 * i1;
+        Te = homeT + (c1 - homeT) / t1 * i1;
+        wait(0.022);
+        if(i1<0){
+            fei=1;
+            men=0;
+            dousa=0;
+            i1=1;
+            }
+        break;
+
+        case 3: //men iki
+        i2=i2+1;
+        Kata = a1 + (a2 - a1) / t2 * i2;
+        Hiji = b1 + (b2 - b1) / t2 * i2;
+        Te = c1 + (c2 - c1) / t2 * i2;
+        wait(0.022);
+        if(i2>t2){
+        fei=4;
+        }
+        break;
+
+        case 4: //men kaeri
+        i2=i2-1;
+        Kata = a1 + (a2 - a1) / t2 * i2;
+        Hiji = b1 + (b2 - b1) / t2 * i2;
+        Te = c1+ (c2 - c1) / t2 * i2;
+        wait(0.022);
+        if(i2<0){
+            i2=1;
+            fei=5;
+            }
+        break;
+        
+        case 5: //home kaeri
+        i1=i1-1;
+        Kata = homeK + (a1 - homeK) / t1 * i1;
+        Hiji = homeH + (b1 - homeH) / t1 * i1;
+        Te = homeT + (c1 - homeT) / t1 * i1;
+        wait(0.022);
+        if(i1<0){
+            i1=1;
+            fei=1;
+            dousa=0;
+            men=0;
+            }
+        break;        
+        }
+      }
+    }
+}
+
+void BOUGYO(void const *argument) {
+ int i=0;
+ float a=0.075f;    //sireiti
+ float b=0.100f;
+ float c=0.035f;
+ float max = maxof(henni(homeK,a),henni(homeH,b),henni(homeT,c));
+ float t = max / (0.03f / 0.17f * 0.01f); //nannbyou kakeruka 60(0.03duty)/0.17 servo /0.02s
+ 
+ while(true){
+        if(bou==1){
+        
+        switch(fei){
+        case 1: //men iki
+        i=i+1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i>t){
+        fei=3;
+        }
+        break;
+
+        case 3: //men kaeri
+        i=i-1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i<0){
+            fei=1;
+            bou=0;
+            dousa=0;
+            i=1;
+            }
+        break;
+        }
+      }
+    }
+}
+
+void TUKI(void const *argument) {
+ int i=0;
+ float a=0.056f;    //sireiti
+ float b=0.084f;
+ float c=0.035f;
+ float max = maxof(henni(homeK,a),henni(homeH,b),henni(homeT,c));
+ float t = max / (0.03f / 0.17f * 0.01f); //nannbyou kakeruka 60(0.03duty)/0.17 servo /0.02s
+ 
+ while(true){
+        if(tuk==1){
+        
+        switch(fei){
+        case 1: //men iki
+        i=i+1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i>t){
+        fei=3;
+        }
+        break;
+        
+        case 2: //feint
+        i=i-1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i<0){
+            fei=1;
+            tuk=0;
+            dousa=0;
+            i=1;
+            }
+        break;
+            
+        case 3: //men kaeri
+        i=i-1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i<0){
+            fei=1;
+            tuk=0;
+            dousa=0;
+            i=1;
+            }
+        break;
+        }
+      }
+    }
+}
+
+void DOU(void const *argument) {
+ int i=0;
+ float a=0.047f;    //sireiti
+ float b=0.087f;
+ float c=0.045f;
+ float max = maxof(henni(homeK,a),henni(homeH,b),henni(homeT,c));
+ float t = max / (0.03f / 0.17f * 0.01f); //nannbyou kakeruka 60(0.03duty)/0.17 servo /0.02s
+ 
+ while(true){
+        if(dou==1){
+        
+        switch(fei){
+        case 1: //men iki
+        i=i+1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i>t){
+        fei=3;
+        }
+        break;
+        
+        case 2: //feint
+        i=i-1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i<0){
+            fei=1;
+            dou=0;
+            dousa=0;
+            i=1;
+            }
+        break;
+            
+        case 3: //men kaeri
+        i=i-1;
+        Kata = homeK + (a - homeK) / t * i;
+        Hiji = homeH + (b - homeH) / t * i;
+        Te = homeT + (c - homeT) / t * i;
+        wait(0.022);
+        if(i<0){
+            fei=1;
+            dou=0;
+            dousa=0;
+            i=1;
+            }
+        break;
+        }
+      }
     }
 }
  
 int main() {
-    Thread thread(led2_thread);
+    Thread t1(HANTEI);
+    Thread t2(ZENGO);
+    Thread t3(MEN);
+    Thread t4(BOUGYO);
+    Thread t5(TUKI);
+    Thread t6(DOU);
     
-    while (true) {
-        led1 = !led1;
-        Thread::wait(500);
+    Kata=homeK;
+    Hiji=homeH;
+    Te=homeT;
+    
+    pc.printf("startfm\n");
+    
+    while (1){
     }
-}
+}
\ No newline at end of file