Arduino version 2

Dependencies:   mbed arduino

arduino2.cpp

Committer:
ea78anana
Date:
2021-11-01
Revision:
0:c9022327ece6
Child:
1:4df9f94facd5

File content as of revision 0:c9022327ece6:

#include "mbed.h"
#include "arduino.h"

#define PinA A0 //A phase
#define PinZ A2 //Z phase
#define PinB A1 //B phase

#define HIGH 1
#define LOW 0

//Initialize Variable
unsigned long time1 = 0; // Time
float time_cw;
float time_ccw;
int counter = 0;
const float d = 6/100; //Radius of the wheel
const float pi = 3.141592654;//PI
int num = 0;//number of turns
double t;//time per turn
float velocity;
double time3;//外部中断1产生时的时间,即捕捉到Z相的置零信号时,用于在loop循环内进行一圈时间长短的计算

DigitalIn a11(PinA);
DigitalIn a12(PinB);
DigitalIn a13(PinZ);
Serial pc(USBTX, USBRX);



void loop()

{
    double  distance;
    //clockwise turning
    if (counter == 2500)
    {
//      Printf("ok");//Testing
      num = num++;
      time_cw = millis();
      t = time_cw - time3;
      t = t / 1000;
      distance = num * d * pi; 
      velocity = d * pi / t;
      pc.printf("The wheel has run ");pc.printf("%f", distance); pc.printf("m.");
      pc.printf("The cw_speed is ");pc.printf("%f", velocity); pc.printf("m/s.");
      pc.printf("The time is ");pc.printf("%f", t); pc.printf("s.");
    }
    //anti-clockwise turning
    else if (counter == -2500)
    {
//      Printf("ok");//Testing
      num = num++;
      time_ccw = millis();
      t = time_ccw - time3;
      t = t / 1000;
      distance = num * d * pi; 
      velocity = d * pi / t;
      pc.printf("The wheel has run ");pc.printf("%f", distance); pc.printf("m.");
      pc.printf("The cw_speed is ");pc.printf("%f", velocity); pc.printf("m/s.");
      pc.printf("The time is ");pc.printf("%f", t); pc.printf("s.");
    }
}

// 编码器计数中断子程序

void Encode()

{

    //为了不计入噪音干扰脉冲,
    
    //当2次中断之间的时间大于5ms时,计一次有效计数
    
    if ((millis() - time1) > 5)

    {

        //当编码器码盘的OUTA脉冲信号下跳沿每中断一次,
        
        if ((a11 == LOW) && (a12 == HIGH))
        
        {
        
            counter--;
        
        }
        
             else
        
        {
        
              counter++;
        
        }
    
    }
    
    time1 = millis();
    
}
void Set_state(){
    counter = 0;
    time3 = millis();//发生中断时的时间
}