900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > arduino 自平衡小车1\霍尔编码器测速(MsTime2)

arduino 自平衡小车1\霍尔编码器测速(MsTime2)

时间:2020-03-25 21:28:53

相关推荐

arduino 自平衡小车1\霍尔编码器测速(MsTime2)

MsTime2,霍尔编码器测速

100毫秒触发一次中断,打印出这100毫秒内,霍尔编码器测到的脉冲数。

代码如下:

#include <MsTimer2.h>//TB6612引脚定义const int right_R1=8; const int right_R2=12;const int PWM_R=10;const int left_L1=7;const int left_L2=6;const int PWM_L=9;const int PinA_left = 5; //定义检测左电机脉冲的引脚为D5const int PinA_right = 4; //定义检测右电机脉冲的引脚为D4int times=0,newtime=0,d_time=100; //时间,最新的时间,时间间隔int valA=0,valB=0,flagA=0,flagB=0; //变量valA和valB用于计算脉冲数void setup(){Serial.begin(9600);pinMode(right_R1,OUTPUT);//TB6612的引脚都设置为输出pinMode(right_R2,OUTPUT);pinMode(PWM_R,OUTPUT);pinMode(left_L1,OUTPUT);pinMode(left_L2,OUTPUT);pinMode(PWM_L,OUTPUT);pinMode(PinA_left,INPUT);//设置检测脉冲的引脚为输入状态pinMode(PinA_right,INPUT);MsTimer2::set(100, inter); // 100ms 触发一次中断,调用函数inter()MsTimer2::start(); //开启中断}void loop() {//两电机都正转digitalWrite(right_R1,HIGH);digitalWrite(right_R2,LOW);digitalWrite(left_L1,HIGH);digitalWrite(left_L2,LOW);analogWrite(PWM_R,100); //写入PWM值0~255(速度)analogWrite(PWM_L,200);if(digitalRead(PinA_left)==HIGH&&flagA==0)//计算脉冲值{valA++;flagA=1;}if(digitalRead(PinA_left)==LOW&&flagA==1){valA++;flagA=0;}if(digitalRead(PinA_right)==HIGH&&flagB==0){valB++;flagB=1;}if(digitalRead(PinA_right)==LOW&&flagB==1){valB++;flagB=0;}}//中断函数void inter() {sei(); //允许全局中断Serial.print("valA = ");//在串口监视器上打印出脉冲值Serial.println(valA);Serial.print("valB = ");Serial.println(valB);valA = valB = 0; //清0}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。