r_test1_2017_10_11_Wed_A

Dependencies:   QEI mbed

Revision:
0:996353c69d55
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 11 08:14:54 2017 +0000
@@ -0,0 +1,358 @@
+#include "mbed.h"
+#include "QEI.h"
+#include "ps3CTRLmbed.h"
+/*
+上 下
+R1 L1 0.5
+R2 L2 遅く
+立ち上がりで停止 pwm=0
+〇 4段階  2個  0にする
+×  停止
+□   0 1
+△  1 0
+*/
+void RL_ONE(void);
+void RL_TWO(void);
+
+QEI wheel1(p30, p29, NC, 624);//p24,p19のモーター
+QEI wheel2(p7, p8, NC, 624);//p25,p20のモーター
+Serial pc(USBTX, USBRX); // tx, rx
+
+void QEI(void);
+
+InterruptIn PH1(p12);//L1とR1のアレ
+InterruptIn PH2(p13);//L2とR2のアレ
+
+/*100行目あたり。□かつS1=0で動く。△かつRS2=0で動く。*/
+DigitalIn RS1(p5);
+DigitalIn RS2(p6);
+
+DigitalOut ST1(p14);
+DigitalOut ST2(p15);
+DigitalOut UD(p16);
+DigitalOut RL1(p17);
+DigitalOut RL2(p18);
+DigitalOut C1(p19);
+DigitalOut C2(p20);
+
+PwmOut UDP(p21);
+PwmOut RLP1(p22);
+PwmOut RLP2(p23);
+PwmOut CP1(p24);
+PwmOut CP2(p25);
+PwmOut STP(p26);
+
+I2C i2c(p9,p10);
+
+int addr=0x00;//アドレスをいじるならここ
+int ack=0;
+double t1=0;
+double t2=0;
+double t3=0;
+double t4=0;
+double t5=0;
+double t6=0;
+int flag=0;
+int p=0;
+int q=0;
+int k=0;
+int CC=0;
+int M=0;      //目標パルス値
+int rs1=0;
+int rs2=0;
+
+int main() {
+    char cmd[4];
+    PS3DefaultSet();
+    while(1) {
+        CheckInputData();
+        for(int i=0;i<4;i++){
+            cmd[i]=(char)psdata[i+3];
+        }
+        i2c.write(addr,cmd,4);
+        
+        /*上下*/
+        if(BTTRUE(UP)){/*上*/
+            t1+=0.2;
+            if(t1>1.0){
+                t1=1.0;
+            }
+            UD=0;
+            UDP=t1;
+        }else if(BTTRUE(DOWN)){/*下*/
+            t1+=0.2;
+            if(t1>1.0){
+                t1=1.0;
+            }
+            UD=1;
+            UDP=t1;
+        }else{
+            t1-=0.2;
+            if(t1<0){
+                t1=0.0;
+            }
+            UDP=t1;
+        }
+        
+        rs1=RS1;
+        rs2=RS2;
+        
+        /*□ △*/
+        if(BTTRUE(SQUARE)&&rs1==0){
+            t6+=0.2;
+            if(t6>1.0){
+                t6=1.0;
+            }
+            ST1=0;
+            STP=t6;
+            ST2=1;
+            STP=t6;
+        }else if(BTTRUE(TRIANGLE)&&rs2==0){
+            t6+=0.2;
+            if(t6>1.0){
+                t6=1.0;
+            }
+            ST1=1;
+            STP=t6;
+            ST2=0;
+            STP=t6;
+        }else{
+            t6-=0.2;
+            if(t6<0.0){
+                t6=0.0;
+            }
+            STP=t6;
+        }
+        
+        //PH1.rise(&RL_ONE);
+        //PH2.rise(&RL_TWO);
+        
+        /*R1 L1*/
+        if(BTTRUE(R1)){/*R1*/
+            PH1.rise(&RL_ONE);
+            if(p<2){
+                t2+=0.1;
+                if(t2>0.5){
+                    t2=0.5;
+                }
+                RL1=0;
+                RLP1=t2;
+            }else{
+                t2=0;
+                RLP1=0;
+            }
+        }else if(BTTRUE(L1)){//L1
+            PH1.rise(&RL_ONE);
+            if(p<2){
+                t2+=0.1;
+                if(t2>0.5){
+                    t2=0.5;
+                }
+                RL1=1;
+                RLP1=t2;
+            }else{
+                t2=0;
+                RLP1=0;
+            }
+        }else{
+            t2-=0.15;
+            if(t2<0){
+                t2=0;
+            }
+            RLP1=t2;
+        }
+        
+        /*R2 L2*/
+        if(BTTRUE(R2)){/*R2*/
+            PH2.rise(&RL_TWO);
+            if(q<2){
+                t3+=0.1;
+                if(t3>0.5){
+                    t3=0.5;
+                }
+                RL2=0;
+                RLP2=t3;
+            }else{
+                t3=0;
+                RLP2=0;
+            }
+        }else if(BTTRUE(L2)){/*L2*/
+            PH2.rise(&RL_TWO);
+            if(q<2){
+                t3+=0.1;
+                if(t3>0.5){
+                    t3=0.5;
+                }
+                RL2=1;
+                RLP2=t3;
+            }else{
+                t3=0;
+                RLP2=0;
+            }
+        }else{
+            t3-=0.15;
+            if(t3<0){
+                t3=0;
+            }
+            RLP2=t3;
+        }
+        
+        if(p>=2 && BTFALSE(R1) && BTFALSE(L1)){
+            p=0;
+        }
+        
+        if(q>=2 && BTFALSE(R2) && BTFALSE(L2)){
+            q=0;
+        }
+        
+        /*
+        //〇
+        while(BTTRUE(CIRCLE)){
+            if(BTFALSE(CIRCLE)){
+                flag=flag+1;
+                if(flag>4){
+                    flag=1;
+                }
+                break;
+            }
+        }
+        */
+        
+        //〇
+        if(BTTRUE(CIRCLE)){
+            CC=1;
+        }
+
+        if(BTFALSE(CIRCLE)){
+            if(CC==1){
+                flag=flag+1;
+                if(flag>4){
+                    flag=1;
+                }
+            }
+            CC=0;
+        }
+        
+        //×
+        if(BTTRUE(CROSS)){
+            CC=0;
+            flag=0;
+        }
+        
+        //〇  ×
+        if(flag>0){//CC>0
+            //if(flag==0){
+            t4+=0.1;
+            t5+=0.1;
+            //}
+            if(t4>(flag*0.2)){
+                t4=flag*0.2;
+            }
+            if(t5>(flag*0.2)){
+                t5=flag*0.2;
+            }
+            
+            if(t4>0.8){
+                t4=0.8;
+                //flag=1;
+            }
+            if(t5>0.8){
+                t5=0.8;
+                //flag=1;
+            }
+            C1=0;
+            C2=0;
+            CP1=t4;
+            CP2=t5;
+            QEI();
+        }else{
+            t4-=0.15;
+            t5-=0.15;
+            if(t4<0){
+                t4=0;
+            }
+            if(t5<0){
+                t5=0;
+            }
+            CP1=0;
+            CP2=0;
+        }
+    }
+}
+
+void RL_ONE(void){
+    p++;
+    if(p>=2){
+        t2=0;
+        RLP1=0;
+    }
+}
+
+void RL_TWO(void){
+    q++;
+    if(q>=2){
+        t3=0;
+        RLP2=t3;
+    }
+}
+
+void QEI(){
+    int a,b/*,A,B*/;
+    //double c,R3,R4;
+    //R3=wheel1.getAngle(); 
+    //R4=wheel2.getAngle(); 
+    a=wheel1.getPulses();
+    b=wheel2.getPulses();
+    //pc.printf("a:%d    b:%d    ",a,b);
+    if(a<0){
+        a=a*(-1);
+    }
+    if(b<0){
+        b=b*(-1);
+    }
+    /*
+    c=(a+b)/2;
+    A=a-(int)c;
+    B=b-(int)c;
+    */
+    
+    M=4+flag*4;
+    
+    if(k>20){
+        if(M>a){
+            t4+=0.02;
+        }
+        else if(M<a){
+            t4-=0.02;
+        }
+        if(t4>1.0){
+            t4=1.0;
+        }
+        if(t4<0.0){
+            t4=0.0;
+        }
+        
+        if(M>b){
+            t5+=0.02;
+        }
+        else if(M<b){
+            t5-=0.02;
+        }
+        if(t5>1.0){
+            t5=1.0;
+        }
+        if(t5<0.0){
+            t5=0.0;
+        }
+        //pc.printf("pwm1:%f    pwm2:%f    ",t4,t5);
+        CP1=t4;
+        CP2=t5;
+        wheel1.reset();
+        wheel2.reset();
+        k=0;
+    }else{
+        k++;
+        //flag=0;
+    }
+    
+}
\ No newline at end of file