decorder

Dependencies:   mbed QEI-1

Committer:
brainliang
Date:
Tue Oct 15 05:03:34 2019 +0000
Revision:
2:af377291f3ae
Parent:
1:1e3eb2d1496b
decoder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glintligo 0:e63858fec119 1 #include "mbed.h"
glintligo 0:e63858fec119 2 #include "QEI.h"
brainliang 2:af377291f3ae 3
brainliang 2:af377291f3ae 4 //两个轮子L298N
glintligo 1:1e3eb2d1496b 5 DigitalOut w1(PB_6);
glintligo 1:1e3eb2d1496b 6 DigitalOut w2(PB_7);
glintligo 1:1e3eb2d1496b 7 DigitalOut w3(PB_8);
glintligo 1:1e3eb2d1496b 8 DigitalOut w4(PB_9);
glintligo 1:1e3eb2d1496b 9 PwmOut mypwm1(PA_9);
glintligo 1:1e3eb2d1496b 10 PwmOut mypwm2(PA_8);
brainliang 2:af377291f3ae 11 //调试串口
glintligo 1:1e3eb2d1496b 12 Serial pc(PB_10, PB_11);
brainliang 2:af377291f3ae 13
glintligo 1:1e3eb2d1496b 14 Ticker toggle_time_ticker;
brainliang 2:af377291f3ae 15 //编码器1-4
brainliang 2:af377291f3ae 16 QEI wheel(PA_2, PA_3, NC, 11, QEI::X4_ENCODING); //买来的电机自带编码器,说明书上有电机每转一圈编码器发生11个信号
glintligo 1:1e3eb2d1496b 17 QEI wheel2(PA_6, PA_7, NC, 11, QEI::X4_ENCODING);
brainliang 2:af377291f3ae 18
glintligo 1:1e3eb2d1496b 19 int x,y;
glintligo 1:1e3eb2d1496b 20 float a= 0.01, b = 0.00860454;
glintligo 1:1e3eb2d1496b 21 void time_ticker();
glintligo 1:1e3eb2d1496b 22 void serialread();
brainliang 2:af377291f3ae 23
glintligo 1:1e3eb2d1496b 24 int main()
glintligo 1:1e3eb2d1496b 25 {
glintligo 1:1e3eb2d1496b 26 mypwm1.period_ms(10);
glintligo 1:1e3eb2d1496b 27 mypwm2.period_ms(10);
brainliang 2:af377291f3ae 28
brainliang 2:af377291f3ae 29 toggle_time_ticker.attach(&time_ticker, 0.2); //使能ticker中断,0.2s产生一次.中断函数用于获取每个轮子的计数值
brainliang 2:af377291f3ae 30
glintligo 1:1e3eb2d1496b 31 pc.attach(&serialread);
brainliang 2:af377291f3ae 32
glintligo 1:1e3eb2d1496b 33 mypwm1.pulsewidth(a);
brainliang 2:af377291f3ae 34 mypwm2.pulsewidth(b);
brainliang 2:af377291f3ae 35 wheel.reset(); //reset函数,将编码器计数值赋0(初始化编码器,开始计数)
glintligo 1:1e3eb2d1496b 36 wheel2.reset();
glintligo 1:1e3eb2d1496b 37 w1 = 0;
brainliang 2:af377291f3ae 38 w2 = 0;
glintligo 1:1e3eb2d1496b 39 w3 = 0;
glintligo 1:1e3eb2d1496b 40 w4 = 0;
glintligo 0:e63858fec119 41 while(1)
glintligo 0:e63858fec119 42 {
glintligo 1:1e3eb2d1496b 43
glintligo 0:e63858fec119 44 }
glintligo 0:e63858fec119 45 }
glintligo 1:1e3eb2d1496b 46
glintligo 1:1e3eb2d1496b 47 void time_ticker(){
brainliang 2:af377291f3ae 48 //获取一个轮子的编码器读到的数和旋转方向
brainliang 2:af377291f3ae 49 x = wheel.getPulses();
brainliang 2:af377291f3ae 50 x = x/44; //将编码器计数值转化成轮子旋转的圈数
brainliang 2:af377291f3ae 51 wheel.getState(); //获取旋转方向,返回值为1--顺时针, -1--逆时针
glintligo 1:1e3eb2d1496b 52 y = wheel2.getPulses();
brainliang 2:af377291f3ae 53 y = y/44; //将编码器计数值转化成轮子旋转的圈数
brainliang 2:af377291f3ae 54 wheel2.getState(); //获取旋转方向,返回值为1--顺时针, -1--逆时针
brainliang 2:af377291f3ae 55
glintligo 1:1e3eb2d1496b 56 wheel.reset();
glintligo 1:1e3eb2d1496b 57 wheel2.reset();
brainliang 2:af377291f3ae 58 pc.printf("x:%d y:%d\n",x,y);
glintligo 1:1e3eb2d1496b 59 }
glintligo 1:1e3eb2d1496b 60
glintligo 1:1e3eb2d1496b 61 void serialread(){
glintligo 1:1e3eb2d1496b 62 switch (pc.getc())
glintligo 1:1e3eb2d1496b 63 {
glintligo 1:1e3eb2d1496b 64 case '1':
glintligo 1:1e3eb2d1496b 65 w1=0;
glintligo 1:1e3eb2d1496b 66 w4=0;
glintligo 1:1e3eb2d1496b 67 break;
glintligo 1:1e3eb2d1496b 68 case '2':
brainliang 2:af377291f3ae 69 w1=1;
glintligo 1:1e3eb2d1496b 70 w4=1;
glintligo 1:1e3eb2d1496b 71 break;
glintligo 1:1e3eb2d1496b 72 default:
glintligo 1:1e3eb2d1496b 73 break;
glintligo 1:1e3eb2d1496b 74 }
glintligo 1:1e3eb2d1496b 75 }