f3rc 3班のエンコーダのプログラムです。

Dependencies:   EC2 Math mbed

main.cpp

Committer:
nobu0103
Date:
2018-09-03
Revision:
1:0ff59878537a
Parent:
0:da183064372e
Child:
2:a682612dd8b7

File content as of revision 1:0ff59878537a:

#include "mbed.h"
#include "Math.h"
#include "Ec.h"
#include "SpeedController.h"
DigitalIn cylinder(p9,PullUp);
DigitalIn cylindert(p10,PullUp);
DigitalIn encoder1a(p11);
DigitalIn encoder1b(p12);
DigitalIn encoder2a(p13);
DigitalIn encoder2b(p14);
AnalogIn LBR1(p17,PullUp);
AnalogIn LBR2(p18,PullUp);
AnalogIn LBR3(p19,PullUp);
AnalogIn LBR4(p20,PullUp);
PwmOut servo12(p21);
PwmOut servo3(p22);
PwmOut motor1(p25);
PwmOut motor2(p26);
DigitalIn motor1cw(p27,PullUp);
DigitalIn motor2cw(p28,PullUp);

EC wheel_1 (p11,p12,/*z相*/,/*分解能*/,0.05)
EC wheel_2 (p13,p14,/*z相*/,/*分解能*/,0.05)
//SpeedControl (p11,p12,/*z相*/,/*分解能*/,0.05,,) pwmでないのでscは使えないかも
//SpeedControl (p13,p14,/*z相*/,/*分解能*/,0.05,,) pwmでないのでscは使えないかも

/*直進用*/
void straight(double t,int l)  //t=時間 l=移動距離
{
    mortor1.period_us(50);
    mortor2.period_us(50);
    double EC1_omega = wheel_1.getOmega(); //ec1の角速度
    double EC2_omega = wheel_2.getOmega(); //ec2の角速度
    double L_1 = EC1_omega*"ecの半径"*t;
    double L_2 = EC2_omega*"ecの半径"*t;
    while(L_1 <= l && L_2 <= l) {
        motor1 = ;
        motor2 = ;
        motor1cw = ;
        motor2cw = ;
    }
}

/*後退用*/
void back(double t,int l)  //t=時間 l=移動距離
{
    mortor1.period_us(50);
    mortor2.period_us(50);
    double EC1_omega = wheel_1.getOmega();
    double EC2_omega = wheel_2.getOmega();
    double L_1 = EC1_omega*"ecの半径"*t;
    double L_2 = EC2_omega*"ecの半径"*t;
    while(L_1 <= l && L_2 <= l) {
        motor1 = ;
        motor2 = ;
        motor1cw = ;
        motor2cw = ;
    }
}

/*右回転*/
void right(double t,int l)  //t=時間 l=機体の中心を回転中心としたときのエンコーダの移動距離
{
    mortor1.period_us(50);
    mortor2.period_us(50);
    double EC1_omega = wheel_1.getOmega();
    double EC2_omega = wheel_2.getOmega();
    double L_1 = EC1_omega*"ecの半径"*t;
    double L_2 = EC2_omega*"ecの半径"*t;
    while(L_1 <= l && L_2 <= -1*l) {
        motor1 = ;
        motor2 = ;
        motor1cw = ;
        motor2cw = ;
    }
}

/*左回転*/
void left(double t,int l)  //t=時間 l=l=機体の中心を回転中心としたときのエンコーダの移動距離
{
    mortor1.period_us(50);
    mortor2.period_us(50);
    double EC1_omega = wheel_1.getOmega();
    double EC2_omega = wheel_2.getOmega();
    double L_1 = EC1_omega*"ecの半径"*t;
    double L_2 = EC2_omega*"ecの半径"*t;
    while(L_1 <= -1*l && L_2 <= l) {
        motor1 = ;
        motor2 = ;
        motor1cw = ;
        motor2cw = ;
    }
}