本帖最后由 wing 于 2017-2-21 21:49 编辑
这次测试的代码,正向转两秒输出计数,然后再反向转两秒输出计数,其中反向的PWM占空比大一些,让两次计数看起来有些不一样
- //gama 电机板实验 + 中断计数器
- int p_led = 4; //接LED
- int p_b_fx =13; //B机方向
- int p_b_dl =11; //B机动力
- int p_b_zd =8; //B机的制动
- volatile unsigned int rotary_encoder_count;
- void setup() {
- Serial.begin(9600);
- pinMode(p_led, OUTPUT);
- //启用电机B的三个管脚,全部设置为输出状态
- pinMode(p_b_fx,OUTPUT); //B机方向
- pinMode(p_b_dl,OUTPUT); //B机动力
- pinMode(p_b_zd,OUTPUT); //B机的制动
- }
- void rotary_encoder_int()
- {
- if (rotary_encoder_count<65535)
- rotary_encoder_count=rotary_encoder_count+1;
- else
- rotary_encoder_count=0;
- }
- void loop() {
- digitalWrite(p_led, HIGH); //指时灯亮
- //初始化计数器
- rotary_encoder_count=0;
- attachInterrupt(0, rotary_encoder_int, CHANGE); //2号针脚接收中断信号
- //B机状态 运行
- digitalWrite(p_b_zd, LOW); //松开电机B的制动
- digitalWrite(p_b_fx, HIGH); //设置方向为正向
- //B机动力
- analogWrite(p_b_dl,200);
- delay(2000);
- //持续2秒后输出 停电机 关中断 输出计数
- analogWrite(p_b_dl,0);
- digitalWrite(p_b_zd, HIGH);
- detachInterrupt(0);
- Serial.println(rotary_encoder_count);
-
- digitalWrite(p_led, LOW); //指时灯关
- delay(5000);
- digitalWrite(p_led, HIGH); //指时灯亮
- rotary_encoder_count=0; //计数器清零
- attachInterrupt(0, rotary_encoder_int, CHANGE); //2号针脚接收中断信号
-
- digitalWrite(p_b_zd, LOW); //松开电机B的制动
- digitalWrite(p_b_fx, LOW); //设置方向为反向
- //B机动力
- analogWrite(p_b_dl,75);
-
- delay(2000);
- //持续2秒后输出 停电机 关中断 输出计数
- analogWrite(p_b_dl,0);
- digitalWrite(p_b_zd, HIGH);
- detachInterrupt(0);
- Serial.println(rotary_encoder_count);
-
- digitalWrite(p_led, LOW); //指时灯关
- delay(5000);
- }
复制代码
个人来说还是很喜欢OC的IDE默认的配色风格,看起来很高格B
|