test

Dependencies:   mbed KondoServoLibrary Encoder

Revision:
19:510b87211851
Parent:
18:f7c587f0f8b8
Child:
20:dd4634500bb3
--- a/User.cpp	Fri Nov 01 01:39:57 2019 +0000
+++ b/User.cpp	Wed Mar 11 09:08:05 2020 +0000
@@ -3,29 +3,56 @@
 #include "hci.h"
 #include "ps3.h"
 #include "User.h"
-#define speed 0.2
+#include "mbed.h"
+#include "math.h"
 #include "mbed.h"
+#include"KondoServo.h"
+#include "EC.h" //Encoderライブラリをインクルード
+#define RESOLUTION 500
 
 int RSX,RSY,LSX,LSY,BSU,BSL;
-//これより下に関数外に書く要素を記入する
-DigitalOut air(p24);
-PwmOut motorRB(p22);
-PwmOut motorRF(p21);
-PwmOut motorLB(p25);
-PwmOut motorLF(p26);
-SPI spi(p5,p6,p7);
-DigitalOut cs(p8);
-int send;
+//Digitalout cs(p8);
+int move=5,shoot=0,ball=0,box=0;
+CAN controller(p30,p29);//CANpin_name
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+char can[1]= {0};
+KondoServo servo(p28,p27);//サーボ
+int out = 1; // shot
+
+
+PwmOut f(p26);//投F
+PwmOut b(p25);//投B
+Ticker ticker;
+Ec1multi EC(p16,p17,RESOLUTION);//投E
+InterruptIn X(p15);
+DigitalOut out1(p19);//エアシリンダー(つかむ方)
+DigitalOut out2(p20);//エアシリンダー(投擲)
 
 
+    int id = 0;
+double SERVO2DEG = 270.0 / (11500 - 3500);
+double first = (6800 - 3500) * SERVO2DEG;
+double grab = (3800 - 3500) * SERVO2DEG;
+double pass = (5000 - 3500) * SERVO2DEG;
+
+void cal()
+{
+    EC.calOmega();
+}
+void shot();
+void catch_ball();
+
+int X_count=0;
+void Xcount()
+{
+    X_count++;
+}
+
 void UserLoopSetting()
 {
-    spi.format(8,3);
-    spi.frequency(1000000);
-    motorRF.period_ms(1);
-    motorRB.period_ms(1);
-    motorLF.period_ms(1);
-    motorLB.period_ms(1);
 }
 void UserLoop(char n,const u8* data)
 {
@@ -50,68 +77,136 @@
         ButtonState =  ((ps3report*)(data + 1))->ButtonState;
     }
     //ここより下にプログラムを書く
-    //spi通信用プログラム
-    send = 0;
-    if((ButtonState >> BUTTONUP)&1 == 1) 
-    {//対応するボタンを書く(今回上ボタン
-        motorRF = 0.2;
-        motorRB = 0;
-        motorLF = 0.2;
-        motorLB = 0;
-        send = 0;
-    }else if((ButtonState >> BUTTONDOWN)&1 == 1) 
-    {//対応するボタンを書く(今回下ボタン
-        motorRF = 0;
-        motorRB = 0.2;
-        motorLF = 0;
-        motorLB = 0.2;
-        send = 0;
-    }else if((ButtonState >> BUTTONL1)&1 == 1) 
-    {//対応するボタンを書く(今回L1ボタン
-        motorRF = 0.2;
-        motorRB = 0;
-        motorLF = 0;
-        motorLB = 0.2;
-        send = 0;
-    }else if((ButtonState >> BUTTONR1)&1 == 1) 
-    {//対応するボタンを書く(今回R1ボタン
-        send = 0;
-        motorRF = 0;
-        motorRB = 0.2;
-        motorLF = 0.2;
-        motorLB = 0;
-    }else if((ButtonState >> BUTTONRIGHT)&1 == 1)//Right
-    {
-        send = 4;
-        motorRF = 0;
-        motorRB = 0.2;
-        motorLF = 0.2;
-        motorLB = 0;
-    }else if((ButtonState >> BUTTONLEFT)&1 == 1)//Left
-    {
-        send = 3;
-        motorRF = 0.2;
-        motorRB = 0;
-        motorLF = 0;
-        motorLB = 0.2;
-    }else{
-        send = 0;
-        motorRF = 0;
-        motorRB = 0;
-        motorLF = 0;
-        motorLB = 0;
+    controller.frequency(1000000);
+    led1=0;
+    led2=0;
+    led3=0;
+    led4=0;
+
+    //move
+    if((ButtonState >> BUTTONUP)&1 == 1&&(ButtonState >> BUTTONL1)&1 == 1) { //UPL1
+        move = 9;
+    } else if ((ButtonState >> BUTTONDOWN)&1 == 1&&(ButtonState >> BUTTONR1)&1 == 1) { //DownR1
+        move = 3;
+    } else if ((ButtonState >> BUTTONUP)&1 == 1&&(ButtonState >> BUTTONR1)&1 == 1) { //UPR1
+        move = 7;
+    } else if ((ButtonState >> BUTTONDOWN)&1 == 1&&(ButtonState >> BUTTONL1)&1 == 1) { //DownL1
+        move = 1;
+    } else if((ButtonState >> BUTTONUP)&1 == 1) { //up
+        move = 8;
+        led1 = 1;
+    } else if((ButtonState >> BUTTONDOWN)&1 == 1) { //down
+        move = 2;
+        led2 =1;
+    } else if((ButtonState >> BUTTONRIGHT)&1 == 1) { //right
+        move = 6;
+        led3 = 1;
+    } else if((ButtonState >> BUTTONLEFT)&1 == 1) { //left
+        move = 4;
+        led4 = 1;
+    } else if((ButtonState >> BUTTONL1)&1 == 1) { //L1
+        move = 10;
+    } else if((ButtonState >> BUTTONR1)&1 == 1) { //R1
+        move = 11;
+    } else if((ButtonState >> BUTTONSELECT)&1 == 1 ) {//対応するボタンを書く(今回SELLECTボタン
+        move = 1;
+    } else {
+        move = 5;
+    }
+    //move
+    //shoot
+    if((ButtonState >> BUTTONCIRCLE)&1 == 1) {//O
+        shoot = 1;
+        led1 = 1;
+    } else if((ButtonState >> BUTTONCROSS)&1 == 1) {//X
+        shoot = 0;
+        led2 = 1;
+    } else if((ButtonState >> BUTTONTRIANGEL)&1 == 1) {//△
+        shoot = 3;
+        led3 = 1;
+    } else if((ButtonState >> BUTTONSQUARE)&1 == 1) {//□
+        shoot = 4;
+        led4 = 1;
     }
-    if((ButtonState >> BUTTONCIRCLE)&1 == 1) {//対応するボタンを書く(今回Oボタン
-        air=1;
-    } else if((ButtonState >> BUTTONCROSS)&1 == 1) {//対応するボタンを書く(今回×ボタン
-        air=0;
+    //CAN通信用プログラム
+    if(shoot==1)shot();
+    if(shoot>=2)catch_ball();
+    can[0] = move;
+    controller.write(CANMessage(1,can,1));
+    printf("%d\r\n",can[0]);
+}
+
+void shot()
+{
+    X.rise(&Xcount);
+    f.period_us(50);
+    b.period_us(50);
+    double a=0,r=0.4,v=0;
+    int i=0,count;//rで半径指定 a*r=v
+    ticker.attach(&cal,0.05);
+    printf("set");
+    if(X_count ==1) {
+        EC.reset();
+        X_count =0;
     }
-    if((ButtonState >> BUTTONR2&1) == 1 )//R2 down
-    {
-        send = 1;
-    }else if((ButtonState >> BUTTONL2)&1 == 1)//L2 up
-    {
-        send = 2;
+    //角度リセット
+    while(1) {
+        printf("%.3f %.3f %d %d\r\n",a,v,X_count,i);
+        a=EC.getOmega();
+        count=EC.getCount();
+        i =count%500;
+        v=a*r;
+        f=0.45;//速度一定
+        b=0.0;
+        led1=1;
+        led2=0;
+        led3=0;
+        led4=1;
+        if(X_count>3) {
+            if(i < -380 && i > -390) {//離す角度を決める
+                out2=1; //ボールを離す
+                printf("shot\r\n");
+                led1=1;
+                led2=1;
+                led3=1;
+                led4=1;
+                break;
+            }
+        }
     }
-    spi. write(send);
+    printf("%.3f %.3f %d %d stop\r\n",a,v,X_count,i);
+    X.rise(&Xcount);
+    a=EC.getOmega();
+    count=EC.getCount();
+    i =count%500;
+    f=0;
+    b=0;
+    led1=0;
+    led2=1;
+    led3=1;
+    led4=0;
+
+}
+
+void catch_ball()
+{
+    switch (shoot) {
+        case 2:
+        servo.set_degree(id, pass);
+        break;
+        case 3:
+        servo.set_degree(id, grab);
+        break;
+        case 4:
+        if (out1==0){
+            out1=1;
+        }else if (out1 == 1){
+            out1=0;
+        }
+    }
+}
+
+void catch_box()
+{
+
 }
\ No newline at end of file