ライブラリ化を行った後

Dependencies:   QEI accelerator bit_test cyclic_io cyclic_var cylinder event_var limit mbed mecanum motor_drive pid pid_encoder rs422_put sbdbt servo

Fork of 17robo_Practice1 by kusano kiyoshige

Committer:
echo_piyo
Date:
Sun Jul 16 08:35:45 2017 +0000
Revision:
12:1fec80ae8a2c
Parent:
10:04f2a82cfd89
Child:
13:dfae731e239f
(??)MBED?Default?QEI????????????; ?????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
echo_piyo 0:bf96e953cdb8 1 #include "mbed.h"
echo_piyo 4:a6cc2f03e69b 2 #include "math.h"
echo_piyo 0:bf96e953cdb8 3 #include "bit_test.h"
echo_piyo 0:bf96e953cdb8 4 #include "RS422_put.h"
echo_piyo 0:bf96e953cdb8 5 #include "sbdbt.h"
echo_piyo 0:bf96e953cdb8 6 #include "mecanum.h"
echo_piyo 0:bf96e953cdb8 7 #include "bno055_lib.h"
echo_piyo 0:bf96e953cdb8 8 #include "bno055_use.h"
echo_piyo 0:bf96e953cdb8 9 #include "pid.h"
echo_piyo 0:bf96e953cdb8 10 #include "limit.h"
echo_piyo 4:a6cc2f03e69b 11 #include "accelerator.h"
echo_piyo 10:04f2a82cfd89 12 #include "encorder.h"
echo_piyo 12:1fec80ae8a2c 13 #include "QEI.h"
echo_piyo 0:bf96e953cdb8 14
echo_piyo 0:bf96e953cdb8 15 #define pc_baud 460800
echo_piyo 0:bf96e953cdb8 16 #define sbdbt_tx p13
echo_piyo 0:bf96e953cdb8 17 #define sbdbt_rx p14
echo_piyo 0:bf96e953cdb8 18 #define sbdbt_baud 115200
echo_piyo 0:bf96e953cdb8 19 #define rs422_tx p28
echo_piyo 0:bf96e953cdb8 20 #define rs422_rx p27
echo_piyo 0:bf96e953cdb8 21 #define rs422_baud 115200
echo_piyo 3:9ef929639c4a 22 #define output_period 0.015
echo_piyo 0:bf96e953cdb8 23 #define nucleo_num 3
echo_piyo 0:bf96e953cdb8 24 #define pi 3.141592
echo_piyo 0:bf96e953cdb8 25 #define n1_id 3
echo_piyo 0:bf96e953cdb8 26 #define n2_id 4
echo_piyo 10:04f2a82cfd89 27 #define n3_id 5
echo_piyo 5:6efda58ff71b 28 #define yaw_Kp 0.01
echo_piyo 5:6efda58ff71b 29 #define yaw_Ki 0.01
echo_piyo 5:6efda58ff71b 30 #define yaw_Kd 0.01
echo_piyo 10:04f2a82cfd89 31 #define acceleration 25
echo_piyo 10:04f2a82cfd89 32 #define pin_cylinder_on p17
echo_piyo 10:04f2a82cfd89 33 #define pin_cylinder_off p18
echo_piyo 12:1fec80ae8a2c 34 #define interrupt_pin p23
echo_piyo 12:1fec80ae8a2c 35 #define encoder_A p25
echo_piyo 12:1fec80ae8a2c 36 #define encoder_B p26
echo_piyo 10:04f2a82cfd89 37 #define enc_Kp 0.01
echo_piyo 10:04f2a82cfd89 38 #define enc_Ki 0.01
echo_piyo 10:04f2a82cfd89 39 #define enc_Kd 0.01
echo_piyo 0:bf96e953cdb8 40
echo_piyo 0:bf96e953cdb8 41 DigitalOut led(LED1);
echo_piyo 10:04f2a82cfd89 42 DigitalOut sylinder_on(pin_cylinder_on);
echo_piyo 10:04f2a82cfd89 43 DigitalOut sylinder_off(pin_cylinder_off);
echo_piyo 12:1fec80ae8a2c 44 DigitalIn interrupt(interrupt_pin);
echo_piyo 0:bf96e953cdb8 45 Serial pc(USBTX,USBRX);
echo_piyo 0:bf96e953cdb8 46 RS422 rs422(rs422_tx, rs422_rx);
echo_piyo 0:bf96e953cdb8 47 Sbdbt sbdbt(sbdbt_tx, sbdbt_rx);
echo_piyo 0:bf96e953cdb8 48 Ticker output_timer;
echo_piyo 0:bf96e953cdb8 49 Mecanum mecanum;
echo_piyo 0:bf96e953cdb8 50 Bno055 bno055;
echo_piyo 2:d5b8f8e62923 51 Position_pid yaw_pid;
echo_piyo 4:a6cc2f03e69b 52 Accel v1;
echo_piyo 4:a6cc2f03e69b 53 Accel v2;
echo_piyo 4:a6cc2f03e69b 54 Accel v3;
echo_piyo 4:a6cc2f03e69b 55 Accel v4;
echo_piyo 12:1fec80ae8a2c 56
echo_piyo 12:1fec80ae8a2c 57 //追加点
echo_piyo 12:1fec80ae8a2c 58 //Encoder enc_cylinder(encoder_A,encoder_B);
echo_piyo 12:1fec80ae8a2c 59 QEI wheel(encoder_A, encoder_B, NC, 624);
echo_piyo 9:6486f4b3ac50 60
echo_piyo 0:bf96e953cdb8 61 void setup();
echo_piyo 0:bf96e953cdb8 62 void output();
echo_piyo 0:bf96e953cdb8 63 void put_output();
echo_piyo 10:04f2a82cfd89 64 void cylinder_check();
echo_piyo 10:04f2a82cfd89 65 void boost();
echo_piyo 12:1fec80ae8a2c 66 void cylinder_origin();
echo_piyo 2:d5b8f8e62923 67 float yaw, target_yaw;
echo_piyo 0:bf96e953cdb8 68
echo_piyo 0:bf96e953cdb8 69 int main()
echo_piyo 0:bf96e953cdb8 70 {
echo_piyo 0:bf96e953cdb8 71 setup();
echo_piyo 2:d5b8f8e62923 72 while(1) {
echo_piyo 12:1fec80ae8a2c 73 led = interrupt;
echo_piyo 12:1fec80ae8a2c 74 pc.printf("Pulses is: %i\r\n",wheel.getPulses());
echo_piyo 0:bf96e953cdb8 75 }
echo_piyo 0:bf96e953cdb8 76 }
echo_piyo 0:bf96e953cdb8 77
echo_piyo 0:bf96e953cdb8 78 void setup()
echo_piyo 0:bf96e953cdb8 79 {
echo_piyo 1:2d878962e6ea 80 wait(1);
echo_piyo 0:bf96e953cdb8 81 bno055.begin();
echo_piyo 0:bf96e953cdb8 82 wait(1);
echo_piyo 0:bf96e953cdb8 83 bno055.firstRead();
echo_piyo 0:bf96e953cdb8 84 pc.baud(pc_baud);
echo_piyo 0:bf96e953cdb8 85 sbdbt.begin(sbdbt_baud);
echo_piyo 0:bf96e953cdb8 86 rs422.begin(rs422_baud);
echo_piyo 0:bf96e953cdb8 87 output_timer.attach(&output, output_period);
echo_piyo 2:d5b8f8e62923 88 yaw_pid.setup(yaw_Kp, yaw_Ki, yaw_Kd);
echo_piyo 10:04f2a82cfd89 89 mecanum.setupdeg(bno055.getYawRad()+180.0);
echo_piyo 4:a6cc2f03e69b 90 v1.setup(acceleration,output_period);
echo_piyo 4:a6cc2f03e69b 91 v2.setup(acceleration,output_period);
echo_piyo 4:a6cc2f03e69b 92 v3.setup(acceleration,output_period);
echo_piyo 4:a6cc2f03e69b 93 v4.setup(acceleration,output_period);
echo_piyo 12:1fec80ae8a2c 94 cylinder_origin();
echo_piyo 12:1fec80ae8a2c 95
echo_piyo 12:1fec80ae8a2c 96 //追加点
echo_piyo 12:1fec80ae8a2c 97 // enc_cylinder.setup(1200);
echo_piyo 12:1fec80ae8a2c 98 // enc_cylinder.set_parameter(enc_Kp,enc_Ki,enc_Kd);
echo_piyo 12:1fec80ae8a2c 99 }
echo_piyo 12:1fec80ae8a2c 100
echo_piyo 12:1fec80ae8a2c 101 void cylinder_origin(){
echo_piyo 12:1fec80ae8a2c 102 while(interrupt){
echo_piyo 12:1fec80ae8a2c 103 rs422.put(5, -0.8, 0.0);
echo_piyo 12:1fec80ae8a2c 104 }
echo_piyo 0:bf96e953cdb8 105 }
echo_piyo 0:bf96e953cdb8 106
echo_piyo 10:04f2a82cfd89 107 void boost(){
echo_piyo 10:04f2a82cfd89 108 if(sbdbt.sankaku) {
echo_piyo 10:04f2a82cfd89 109 mecanum.boost_forward();
echo_piyo 10:04f2a82cfd89 110 }
echo_piyo 10:04f2a82cfd89 111 if(sbdbt.batu) {
echo_piyo 10:04f2a82cfd89 112 mecanum.boost_back();
echo_piyo 10:04f2a82cfd89 113 }
echo_piyo 10:04f2a82cfd89 114 if(sbdbt.shikaku) {
echo_piyo 10:04f2a82cfd89 115 mecanum.boost_left();
echo_piyo 10:04f2a82cfd89 116 }
echo_piyo 10:04f2a82cfd89 117 if(sbdbt.maru) {
echo_piyo 10:04f2a82cfd89 118 mecanum.boost_right();
echo_piyo 10:04f2a82cfd89 119 }
echo_piyo 10:04f2a82cfd89 120 }
echo_piyo 10:04f2a82cfd89 121
echo_piyo 10:04f2a82cfd89 122 void cylinder_check()
echo_piyo 10:04f2a82cfd89 123 {
echo_piyo 12:1fec80ae8a2c 124 if(sbdbt.up) {
echo_piyo 10:04f2a82cfd89 125 sylinder_on = 1;
echo_piyo 10:04f2a82cfd89 126 } else {
echo_piyo 10:04f2a82cfd89 127 sylinder_on = 0;
echo_piyo 10:04f2a82cfd89 128 }
echo_piyo 10:04f2a82cfd89 129
echo_piyo 12:1fec80ae8a2c 130 if(sbdbt.down) {
echo_piyo 10:04f2a82cfd89 131 sylinder_off = 1;
echo_piyo 10:04f2a82cfd89 132 } else {
echo_piyo 10:04f2a82cfd89 133 sylinder_off = 0;
echo_piyo 10:04f2a82cfd89 134 }
echo_piyo 10:04f2a82cfd89 135 }
echo_piyo 10:04f2a82cfd89 136
echo_piyo 10:04f2a82cfd89 137
echo_piyo 10:04f2a82cfd89 138
echo_piyo 5:6efda58ff71b 139 void put_output()
echo_piyo 5:6efda58ff71b 140 {
echo_piyo 4:a6cc2f03e69b 141 yaw = bno055.getYawRad();
echo_piyo 4:a6cc2f03e69b 142 target_yaw = yaw;
echo_piyo 4:a6cc2f03e69b 143 yaw_pid.cal(target_yaw, yaw, output_period);
echo_piyo 4:a6cc2f03e69b 144 mecanum.sbdbt_cal(sbdbt.left_x, sbdbt.left_y, sbdbt.l1, sbdbt.r1, yaw_pid.duty(), bno055.getYawRad());
echo_piyo 5:6efda58ff71b 145 // pc.printf("%f\t data %f\t %f\t %f\t %f\t\r\n", bno055.getYawRad(), sbdbt.left_x, sbdbt.left_y, mecanum.VX(), mecanum.VY());
echo_piyo 0:bf96e953cdb8 146 }
echo_piyo 0:bf96e953cdb8 147
echo_piyo 0:bf96e953cdb8 148 void output()
echo_piyo 0:bf96e953cdb8 149 {
echo_piyo 4:a6cc2f03e69b 150 put_output();
echo_piyo 12:1fec80ae8a2c 151 cylinder_check();
echo_piyo 10:04f2a82cfd89 152 boost();
echo_piyo 4:a6cc2f03e69b 153
echo_piyo 0:bf96e953cdb8 154 static int counter;
echo_piyo 0:bf96e953cdb8 155 int id[nucleo_num] = {n1_id, n2_id, n3_id};
echo_piyo 0:bf96e953cdb8 156
echo_piyo 5:6efda58ff71b 157
echo_piyo 0:bf96e953cdb8 158 switch (counter) {
echo_piyo 0:bf96e953cdb8 159 case 0:
echo_piyo 4:a6cc2f03e69b 160 rs422.put(id[counter], v1.duty(mecanum.v1()), v3.duty(mecanum.v3()));
echo_piyo 0:bf96e953cdb8 161 counter++;
echo_piyo 0:bf96e953cdb8 162 break;
echo_piyo 0:bf96e953cdb8 163 case 1:
echo_piyo 4:a6cc2f03e69b 164 rs422.put(id[counter], v2.duty(mecanum.v2()), v4.duty(mecanum.v4()));
echo_piyo 0:bf96e953cdb8 165 counter ++;
echo_piyo 0:bf96e953cdb8 166 break;
echo_piyo 0:bf96e953cdb8 167 case 2:
echo_piyo 10:04f2a82cfd89 168 rs422.put(id[counter], sbdbt.right_y, 0.0);
echo_piyo 0:bf96e953cdb8 169 counter = 0;
echo_piyo 0:bf96e953cdb8 170 break;
echo_piyo 0:bf96e953cdb8 171 default:
echo_piyo 0:bf96e953cdb8 172 break;
echo_piyo 0:bf96e953cdb8 173 };
echo_piyo 5:6efda58ff71b 174 }
echo_piyo 5:6efda58ff71b 175