我是arduino / robotics的新手,并编写了一些简单的代码,应使用中断来测量车轮上的编码器滴答声,并在达到某个值(设定距离)后停止,但是似乎并没有增加编码器值因此车轮永远不会停止。有人可以协助我吗? 代码:
const int pwm1 = 9 ; //initializing pin 2 as pwm
const int in1 = 8 ;
const int in2 = 12 ;
const int pwm2 = 10 ; //initializing pin 2 as pwm
const int in3 = 11 ;
const int in4 = 13 ;
const int e1 = 2 ;
const int e2 = 3 ;
const int tickGoal = 90;
volatile int encoderValue= 0;
void isrFunction() {
encoderValue++ ;
}
void setup() {
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(pwm1,OUTPUT);
pinMode(pwm2,OUTPUT);
pinMode(e1, INPUT);
pinMode(e2, INPUT);
attachInterrupt(digitalPinToInterrupt(e1), isrFunction, CHANGE);
}
void loop() {
if (encoderValue < tickGoal) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(pwm1, 255);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(pwm2, 255);
} else {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
}
答案 0 :(得分:0)
首先,尝试打开中断引脚的内部上拉电阻。
pinMode(interruptPin, INPUT_PULLUP);
如果这样做不行,请运行规范的中断草图并触发中断以使LED闪烁:
int interruptPin = 2;
int LEDPin = 13;
volatile int state = LOW;
void setup() {
pinMode(LEDPin, OUTPUT);
pinMode(InterruptPin, INPUT_PULLUP)
attachInterrupt(digitalPinToInterrupt(InterruptPin), blink, CHANGE);
}
void loop() {
digitalWrite(LEDPin, state);
}
void blink() {
state = !state;
}
如果这不起作用,则可能是接线,编码器,电压,针脚烧断或类似问题。如果无法到达目的地,您可以发布更多信息。